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

如何在SQL Server中将表内嵌套JSON数组解析展开为多行数据

你之前的写法JSON_VALUE(JsonObject, '$.Messages.Sender')无法返回结果,是因为Messages是数组类型,不是对象类型,不能直接访问子属性,必须先将数组拆分为单个元素的行才能提取对应属性。

实现数组拆分为多行的方案如下:
使用SQL Server内置的OPENJSON函数配合CROSS APPLY关联即可实现需求,查询语句如下:

SELECT 
    JSON_VALUE(t.JsonObject, '$.Id') AS Id,
    JSON_VALUE(t.JsonObject, '$.Provider') AS Provider,
    JSON_VALUE(msg.value, '$.Sender') AS Sender,
    JSON_VALUE(msg.value, '$.Text') AS Text
FROM
    dbo.t
CROSS APPLY OPENJSON(t.JsonObject, '$.Messages') AS msg

参数说明:

  • OPENJSON(t.JsonObject, '$.Messages') 会定位到JSON中的Messages数组,将数组内的每一个元素转为单独的行,返回结果的value字段存储单个Message对象的JSON内容
  • CROSS APPLY 会将原表的每一行和其对应的Messages数组拆解出的所有行做关联,最终实现每个Message单独展示为一行的效果
  • 如果你需要保留Messages数组为空或者不存在的原表记录,可以将CROSS APPLY替换为OUTER APPLY,此时对应的Sender和Text字段会返回NULL,不会过滤这部分行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:24:03