0

我正在尝试获取 sql 中 JSON 类型的字段值。不幸的是,路径有'-',所以当我尝试获取值时出现错误。

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。

有没有人有办法解决吗?

4

2 回答 2

1

所以你最初发布:

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 必须与标量(单值)属性一起使用,而不是集合/数组(包含在 中的事物[])或复杂对象(包含在 中的事物{}

精美的手册有一个很好的表格,说明当您尝试使用 JSON_VALUE 在宽松和严格模式下选择各种事物时会发生什么

于 2020-10-26T15:14:54.420 回答
0

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

所以下面的代码工作正常

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

返回 ["55.06"]

于 2020-10-26T15:35:07.770 回答