如何使用SQL的OPENJSON将父对象与嵌套数组关联
解决嵌套JSON数组关联父对象值的问题
你需要调整CROSS APPLY的用法,针对每个父对象的AccountIds数组单独解析,而不是重复解析整个JSON字符串。以下是正确的实现代码:
declare @data nvarchar(max)='[ { "Id": "A", "AccountIds": [ 1 ] }, { "Id": "B", "AccountIds": [ 2, 3 ] }, { "Id": "C", "AccountIds": [ 1, 2 ] } ]' select parent.[Id], CAST(account.value AS INT) AS [AccountId] from openjson(@data) with ( [Id] nvarchar(20) '$.Id', [AccountIds] nvarchar(max) '$.AccountIds' AS JSON ) as parent cross apply openjson(parent.[AccountIds]) as account
代码说明:
- 第一步
OPENJSON(@data)解析外层JSON数组,通过WITH子句读取每个对象的Id,并把AccountIds标记为JSON类型(AS JSON),这样后续可以对它进行嵌套解析。 CROSS APPLY openjson(parent.[AccountIds])针对每个父对象的AccountIds数组进行解析,account.value就是数组中的每个元素值,最后转成INT类型匹配预期的输出格式。
执行后会得到你想要的输出:
Id AccountId ---------- ----------- A 1 B 2 B 3 C 1 C 2
内容的提问来源于stack exchange,提问作者Wahid Masud
相关产品推荐
相关产品推荐

