问题描述
我正在尝试获取JSON类型的sql中的字段值。不幸的是,路径具有“-”,因此在尝试获取值时出现错误。
field->** **{"Con":["AA"],"X-Location-Latitude":["55.06"]}
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”]