我正在尝试在存储在SQL Server表中的某些JSON数据中返回一个值。除了我正在使用一些非常特殊的JSON数据 - 它是DICOM(医学成像标准(。在 JSON 的 DICOM 标准中,JSON 文本中的实际属性名称是数字(它们是 DICOM 标记号(。因此,例如,有一个包含患者 ID 的标签 (0010,0020(。在 JSON 中,它看起来像这样:
{
"00100020":
{
"vr":"LO",
"Value":"123456789"
}
}
通常,我会通过执行以下查询(表名为"实例"(来访问它:
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属性名称识别为实际的属性名称(字符串(,而不是我扔进去的数字?
提前感谢一堆人的任何帮助!
在 JSON 路径表达式中使用双引号。 例如:
declare @doc nvarchar(max) =
'{
"00100020":
{
"vr":"LO",
"Value":"123456789"
}
}';
SELECT JSON_Value(@doc,'$."00100020".Value') AS PatientID