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

如何用OPENJSON解析拼接的多节点JSON字符串?

解析拼接JSON字符串提取指定字段的实现方案

首先要明确:你手里的是多个独立JSON对象直接拼接的字符串,不是标准JSON数组,所以第一步得把它转换成合法的JSON数组,这样OPENJSON才能正常解析。

完整T-SQL示例代码

-- 定义示例拼接JSON变量
DECLARE @jsonData NVARCHAR(MAX) = N'{"data":{"identity":"ID001","elementValue":"Value1"}}{"data":{"identity":"ID002","elementValue":"Value2"}}';

-- 将拼接的JSON转换为合法数组:把每个对象的分界符"}{"替换成"},{",再包裹上[]
SET @jsonData = N'[' + REPLACE(@jsonData, N'}{', N'},{') + N']';

-- 解析并提取目标字段
SELECT 
    jd.identity,
    jd.elementValue
FROM OPENJSON(@jsonData)
WITH (
    data NVARCHAR(MAX) AS JSON -- 标记外层对象里的data节点为JSON类型,方便后续解析
) AS main
CROSS APPLY OPENJSON(main.data) -- 关联解析每个外层对象的嵌套data节点
WITH (
    identity NVARCHAR(50),    -- 提取identity字段
    elementValue NVARCHAR(100) -- 提取elementValue字段
) AS jd;

关键逻辑说明

  1. JSON格式修正:因为原始字符串是多个JSON直接拼接(比如{...}{...}),不符合JSON规范,所以用REPLACE把}{替换成},{,再加上首尾的[],转换成标准数组格式[{...},{...}]。
  2. CROSS APPLY的作用:
    • 第一层OPENJSON(@jsonData)把数组拆成一个个独立的外层JSON对象,每个对象里包含data这个嵌套节点。
    • CROSS APPLY用来关联遍历每个外层对象的data节点,把嵌套的JSON结构拆平,提取出你需要的identity和elementValue字段,最终输出成表格形式。

如果你的原始JSON拼接时带有空格、换行符这类分隔,只需要调整REPLACE的匹配内容即可(比如把N'}{'改成N' }{')。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:07:04