MS SQL Server中访问数字属性名JSON的JSON_VALUE问题求助
没问题,这个坑我之前也遇到过!SQL Server的JSON路径解析器对纯数字属性名的处理确实有特殊规则,直接写会被当成数组索引,导致路径格式错误。
快速解决方案
把纯数字的属性名用双引号包裹在JSON路径里,明确告诉SQL Server这是字符串类型的属性键,修改后的查询语句如下:
SELECT JSON_Value(JSONData, '$."00100020".Value') AS PatientID FROM Instance
为什么之前会报错?
SQL Server的JSON路径语法有个关键规则:
- 如果属性名符合T-SQL标识符规则(比如以字母开头、不含特殊字符),可以直接写在路径里(就像你给属性名加前缀"A"后的写法)
- 但纯数字的属性名不符合标识符规则,解析器会默认把它当成数组的索引值,而非对象的属性键,所以才会抛出“JSON路径格式不正确”的错误。用双引号包裹后,解析器就会明确将其识别为字符串属性名了。
测试验证
针对你提供的原始JSON数据:
{ "00100020": { "vr":"LO", "Value":"123456789" } }
执行修改后的查询,就能正常返回123456789作为PatientID的值,完全不需要改动原始的JSON结构。
内容的提问来源于stack exchange,提问作者Scott Mallonee




