如何修复SQL Server JSON_VALUE路径有“-”错误

问题描述

我正在尝试获取JSON类型的sql中的字段值。不幸的是,路径具有“-”,因此在尝试获取值时出现错误

field->** **{"Con":["AA"],"X-Location-Latitude":["55.06"]}

当我尝试通过以下查询获取json值

SELECT JSON_VALUE(field,'$.X-Location-Latitude') 
FROM table

我收到此错误

Json路径格式不正确,发现意外字符'-'

我也尝试添加双引号

SELECT JSON_VALUE(field,'$."X-Location-Latitude"') 
FROM table

这返回NULL。

有人可以解决吗?

解决方法

所以您最初发布了:

field-> {"Con":"[AA]","X-Location-Latitude":"[55]"}

"[55]"是长度为4的单个字符串; '$."X-Location-Latitude"'对于该单个值是正确的。


现在您已将其更改为:

{"Con":["AA"],"X-Location-Latitude":["55.06"]}

["55.06"]完全不同的东西(不是因为.06);这是一个字符串数组,其中包含一个元素"55.06"。这与JSON_VALUE完全不同

JSON_VALUE不能与选择数组的路径一起使用;您必须在数组中指定一个值,例如:

SELECT JSON_VALUE(field,'$."X-Location-Latitude"[0]') FROM table
                                                 ^^^
                                          first array element

JSON_VALUE必须与标量(单个值)属性一起使用,而不是集合/数组([]中包含的内容)或复杂对象({}中包含的内容)

The fine manual上有一张漂亮的表格,说明当您尝试以松懈和严格模式尝试使用JSON_VALUE选择各种事物时会发生什么情况

,

JSON_QUERY 代替 JSON_VALUE 解决了我的问题。

所以下面的代码可以正常工作

SELECT JSON_QUERY(field,'$."X-Location-Latitude"') FROM table 

返回[“ 55.06”]