【问题标题】:JSON_VALUE path "$" returns NULL when it contains dataJSON_VALUE 路径“$”包含数据时返回 NULL
【发布时间】:2020-10-08 21:02:02
【问题描述】:

我有一列 data{"name":["John","Peter"],id:["20","30"]} 组成

如果我这样做

SELECT JSON_VALUE(data,'$.name[0]') from table

它返回 John 但正在做

SELECT JSON_VALUE(data,'$') from db
SELECT JSON_VALUE(data,'$.name') from table

两者都返回NULL

怎么还不回来:

{"name":["John","Peter"],id:["20","30"]}
["John","Peter"]

【问题讨论】:

  • $.name 不包含标量值,它包含一个数组。你在这里追求的实际结果是什么?如果您只是想要 JSON 数据,则不要使用 JSON_VALUE,只需引用 data(另外,我希望您没有名为db 的表,这有点令人困惑;表不是数据库,表是数据库对象。)
  • 我正在尝试提取name 的数组(基于docs.microsoft.com/en-us/sql/relational-databases/json/…)。同意db- 我现在更改了它以进行澄清。

标签: json sql-server-2019


【解决方案1】:

正如JSON_VALUE 文档的remarks 部分所述,有一个表格说明 json 中的tags 数组说明:请改用 JSON_QUERY

SELECT json_query(j,'$.name') from a;

Fiddle

【讨论】:

  • 正是我所需要的——简短的问题;你知道如何获取数组的最后一个元素吗,比如json_value(j,'$.name[-1]')' ?
  • @CutePoison 好吧,没有直接的解决方案,但你可以检查这个so question
  • 这是一个不同的问题,@CutePoison,应该作为一个新问题发布,但并不难;虽然你会使用OPENJSON 而不是JSON_QUERY()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多