使用数字属性名称访问 MS SQL Server 中的JSON_VALUE



我正在尝试在存储在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 

相关内容

  • 没有找到相关文章