如何修复 SQL 服务器 JSON_VALUE 路径有“-”错误
How to fix SQL server JSON_VALUE path has '-' error
我正在尝试获取 JSON 类型的 sql 字段的值。不幸的是路径有'-',所以当我尝试获取值时出现错误。
field->** **{"Con":["AA"],"X-Location-Latitude":["55.06"]}
当我尝试使用以下查询获取 json 值时
SELECT JSON_VALUE(field, '$.X-Location-Latitude')
FROM table
我收到这个错误
Json path is not properly formatted unexpected character '-' is found
我也尝试添加双引号作为
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 为数组的路径一起使用;您必须指定数组中的单个值,例如:
SELECT JSON_VALUE(field, '$."X-Location-Latitude"[0]') FROM table
^^^
first array element
JSON_VALUE 必须与标量(单值)属性一起使用,而不是 collections/arrays(包含在 []
中的东西)或复杂对象(包含在 {}
中的东西)
The fine manual 有一个很好的 table 关于当你在 JSON_VALUE 下尝试 select 各种事情时会发生什么,在松散和严格模式下
用 JSON_QUERY 替换 JSON_VALUE 解决了我的问题。
所以下面的代码工作正常
SELECT JSON_QUERY(field, '$."X-Location-Latitude"') FROM table
Returns ["55.06"]
我正在尝试获取 JSON 类型的 sql 字段的值。不幸的是路径有'-',所以当我尝试获取值时出现错误。
field->** **{"Con":["AA"],"X-Location-Latitude":["55.06"]}
当我尝试使用以下查询获取 json 值时
SELECT JSON_VALUE(field, '$.X-Location-Latitude')
FROM table
我收到这个错误
Json path is not properly formatted unexpected character '-' is found
我也尝试添加双引号作为
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 为数组的路径一起使用;您必须指定数组中的单个值,例如:
SELECT JSON_VALUE(field, '$."X-Location-Latitude"[0]') FROM table
^^^
first array element
JSON_VALUE 必须与标量(单值)属性一起使用,而不是 collections/arrays(包含在 []
中的东西)或复杂对象(包含在 {}
中的东西)
The fine manual 有一个很好的 table 关于当你在 JSON_VALUE 下尝试 select 各种事情时会发生什么,在松散和严格模式下
用 JSON_QUERY 替换 JSON_VALUE 解决了我的问题。
所以下面的代码工作正常
SELECT JSON_QUERY(field, '$."X-Location-Latitude"') FROM table
Returns ["55.06"]