如何用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;
关键逻辑说明
- JSON格式修正:因为原始字符串是多个JSON直接拼接(比如
{...}{...}),不符合JSON规范,所以用REPLACE把}{替换成},{,再加上首尾的[],转换成标准数组格式[{...},{...}]。 - CROSS APPLY的作用:
- 第一层
OPENJSON(@jsonData)把数组拆成一个个独立的外层JSON对象,每个对象里包含data这个嵌套节点。 CROSS APPLY用来关联遍历每个外层对象的data节点,把嵌套的JSON结构拆平,提取出你需要的identity和elementValue字段,最终输出成表格形式。
- 第一层
如果你的原始JSON拼接时带有空格、换行符这类分隔,只需要调整REPLACE的匹配内容即可(比如把N'}{'改成N' }{')。
内容的提问来源于stack exchange,提问作者Mason
相关产品推荐
相关产品推荐

