在 SQL Server 2016 中循环 JSON
Posted
技术标签:
【中文标题】在 SQL Server 2016 中循环 JSON【英文标题】:Loop through JSON in SQL Server 2016 【发布时间】:2020-03-03 07:17:32 【问题描述】:我有以下 JSON
"href":
"host": "localhost",
"port": 2222
,
"name": "20190812",
"scheduledStartTime": "2019-08-12T12:22:52.500-04:00",
"parameters":
"1251226":
"value":
"instanceID": 219002,
"productName": "product1",
"userID": "admin"
,
"1251287":
"value":
"sgName": "sg1",
"userID": "admin"
我想遍历 JSON 并逐个处理每个迭代。 我尝试使用 While 将 JSON 的长度作为计数,但无法弄清楚如何逐个获取值
在 SQL Server 2016 中甚至可能吗?
到目前为止我已经尝试过了
Declare @count INT
select @count = COUNT(*)
FROM OPENJSON((select template_data_mapping from template_data_mapping), N'$')
WHILE @count != 0
BEGIN
SELECT @count
SET @count = @count - 1;
END;
【问题讨论】:
到目前为止你尝试了什么??预期的输出是什么?? 您希望从每次迭代中获得什么数据——可能是来自parameters
JSON 数组的值?如果是这样,你想用这些值做什么?
【参考方案1】:
不清楚您为什么...想要遍历 JSON 并一个一个地处理每个迭代...使用 WHILE
循环,但一种可能的基于集合的方法解析这个 JSON 是为了使用内置的 JSON 支持:
JSON:
DECLARE @json nvarchar(max) = N'
"href":
"host": "localhost",
"port": 2222
,
"name": "20190812",
"scheduledStartTime": "2019-08-12T12:22:52.500-04:00",
"parameters":
"1251226":
"value":
"instanceID": 219002,
"productName": "product1",
"userID": "admin"
,
"1251287":
"value":
"sgName": "sg1",
"userID": "admin"
'
声明:
SELECT
j1.host, j1.port, j1.scheduledStartTime,
j2.[key] AS parameter,
j3.[key], j3.[value]
FROM OPENJSON(@json) WITH (
host varchar(100) '$.href.host',
port int '$.href.port',
name varchar(100) '$.name',
scheduledStartTime varchar(30) '$.scheduledStartTime',
parameters nvarchar(max) '$.parameters' AS JSON
) j1
OUTER APPLY OPENJSON(j1.parameters, '$') j2
OUTER APPLY OPENJSON(j2.[value], '$.value') j3
结果:
host port scheduledStartTime parameter key value
localhost 2222 2019-08-12T12:22:52.500-04:00 1251226 instanceID 219002
localhost 2222 2019-08-12T12:22:52.500-04:00 1251226 productName product1
localhost 2222 2019-08-12T12:22:52.500-04:00 1251226 userID admin
localhost 2222 2019-08-12T12:22:52.500-04:00 1251287 sgName sg1
localhost 2222 2019-08-12T12:22:52.500-04:00 1251287 userID admin
【讨论】:
以上是关于在 SQL Server 2016 中循环 JSON的主要内容,如果未能解决你的问题,请参考以下文章
使用 for 循环将多条记录插入 SQL Server 数据库
在javascript中循环遍历python-dictionary-turned-into-json