我正在尝试返回存储在SQL Server表中的一些JSON数据中的值。除了我正在处理一些非常特殊的JSON数据--它是DICOM (医学成像标准)。在JSON的DICOM标准中,JSON文本中的实际属性名称是数字(它们是DICOM标签号)。例如,有一个包含患者ID的标记(0010,0020)。在JSON中,它看起来像这样:
{
"00100020":
{
"vr":"LO",
"Value":"123456789"
}
}
通常,我会通过执行以下查询来访问它(表名为"Instance"):
SELECT JSON_Value(JSONData,'$.00100020.Value') AS PatientID FROM Instance
但这并不适用于MSSQL。我得到了这个错误:
Msg 13607, Level 16, State 4, Line 1
JSON path is not properly formatted. Unexpected character '0' is found at position 2.
我能做的就是编辑JSON文本,使其看起来像这样(请注意,我所做的所有不同之处就是在属性名称前添加了一个"A“前缀)……
{
"A00100020":
{
"vr":"LO",
"Value":"123456789"
}
}
这样做之后,我就可以运行这个查询并成功地返回结果:
SELECT JSON_Value(JSONData,'$.A00100020.Value') AS PatientID FROM Instance
唯一的区别是属性名称中有一个字母字符,而不是所有的数字字符。
在实际操作中,我无法更改此JSON数据的格式。属性名是数字的,这就是它将要使用的方式。如果属性名只包含数字,SQL Server似乎希望以不同的方式处理它。有没有办法强制SQL将像"00100020“这样的JSON属性名识别为实际的属性名(字符串),而不是我混入其中的数字?
提前感谢大家的帮助!
发布于 2018-06-01 05:56:32
在JSON Path表达式中使用双引号。例如:
declare @doc nvarchar(max) =
'{
"00100020":
{
"vr":"LO",
"Value":"123456789"
}
}';
SELECT JSON_Value(@doc,'$."00100020".Value') AS PatientID
https://stackoverflow.com/questions/50633222
复制相似问题