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

如何将SQL中合并后的JSON数组提取为常规行列格式?

解析JSON数组为关系型表格

没问题,你可以用SQL Server的OPENJSON函数轻松完成这个转换,它专门用来把JSON数据拆解成常规的行和列结构。结合你现有的代码,完整的实现方案如下:

方案一:使用JSON_VALUE提取字段

DECLARE @TheTable table(TheJSON nvarchar(max), Condition int )
DECLARE @mystring nvarchar(100)='{"id": 3, "name": "Three"}'
INSERT INTO @TheTable SELECT '[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"}]', 1
UPDATE @TheTable SET TheJSON = JSON_MODIFY(TheJSON, 'append $', JSON_QUERY(N'{"id": 3, "name": "Three"}')) WHERE Condition = 1;

-- 核心解析代码
SELECT 
    JSON_VALUE(item.value, '$.id') AS ID,
    JSON_VALUE(item.value, '$.name') AS Name
FROM @TheTable
CROSS APPLY OPENJSON(TheJSON) AS item
WHERE Condition = 1;

方案二:用OPENJSON的WITH子句直接映射列(更推荐)

这种方式可读性更强,还能直接指定列的数据类型:

DECLARE @TheTable table(TheJSON nvarchar(max), Condition int )
DECLARE @mystring nvarchar(100)='{"id": 3, "name": "Three"}'
INSERT INTO @TheTable SELECT '[{"id": 1, "name": "One"}, {"id": 2, "name": "Two"}]', 1
UPDATE @TheTable SET TheJSON = JSON_MODIFY(TheJSON, 'append $', JSON_QUERY(N'{"id": 3, "name": "Three"}')) WHERE Condition = 1;

SELECT ID, Name
FROM @TheTable
CROSS APPLY OPENJSON(TheJSON)
WITH (
    ID int '$.id',          -- 映射JSON中的id字段为int类型的ID列
    Name nvarchar(50) '$.name'  -- 映射JSON中的name字段为nvarchar类型的Name列
)
WHERE Condition = 1;

执行任意一种方案后,都会得到你想要的结果:

IDName
1One
2Two
3Three

简单说明原理:

  • OPENJSON(TheJSON)会把你的JSON数组拆分成单个JSON对象的行数据
  • CROSS APPLY用来将原表的每一行和其对应的JSON拆分结果做关联
  • WITH子句(或JSON_VALUE)用来定义要提取的列名、数据类型,以及对应的JSON字段路径(比如$.id就是取每个JSON对象里的id属性)

这样就能完美把合并后的JSON数组转换成常规表格格式啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:52:35