You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中JSON_VALUE返回NULL问题:如何提取JSON数组中的address字段值

解决JSON_VALUE提取字段返回NULL的问题

嘿,我来帮你揪出问题所在!先拆解下你存储的JSON结构:

{"DisplayCommandList":[{"address":"10 Test Avenue","dwelling":true}]}

这里的DisplayCommandList是一个数组(注意外层的方括号[]),而非单个JSON对象——这就是你所有语句返回NULL的核心原因!

分析你写的错误路径

  • $.DisplayCommandList.address:直接给数组DisplayCommandList调用address属性,但数组本身没有这个属性,必须先定位到数组里的具体元素
  • $.DisplayCommandList.address[0]:路径顺序完全搞反了,应该先取数组的第0个元素,再访问它的address,而不是反过来
  • $.DisplayCommandList.address[1]/$.DisplayCommandList.address[2]:不仅路径顺序错误,你的数组里只有1个元素,就算路径正确,索引1、2本身不存在,自然返回NULL

正确的提取方式

你其实已经写对了一个路径$.DisplayCommandList[0].address,但如果还是返回NULL,大概率是因为存储的JSON是HTML转义后的格式(比如你给出的{"DisplayCommandList":[{"address":"10 Test Avenue","dwelling":true}]}),JSON_VALUE无法解析这种带"的转义字符串,得先替换成正常的双引号:

SELECT JSON_VALUE(REPLACE([Result], '"', '"'), '$.DisplayCommandList[0].address')
FROM Table;

如果数据库里存储的已经是正常无转义的JSON,直接用$.DisplayCommandList[0].address就能正确提取10 Test Avenue。

提取数组中所有address的扩展方案

如果DisplayCommandList数组可能包含多个元素,想要批量提取所有address值,可以用OPENJSON遍历数组:

SELECT j.address
FROM Table
CROSS APPLY OPENJSON([Result], '$.DisplayCommandList')
WITH (
    address NVARCHAR(100) '$.address'
) j;

这样不管数组里有几个元素,所有的address都会被列出来。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 21:42:42