英文:
Updating JSON Array Property In SQL
问题
我正在使用Microsoft SQL Server,并且我有一个包含JSON数组的SQL变量。现在,我想要更新JSON数组中所有JSON对象的一个属性并将其设置为0。
我已经尝试了以下查询,但它只更新了第一个JSON对象。
DECLARE @Json varchar(MAX), @updatedJson varchar(MAX);
SET @Json = '[{"LocationID":1234,"LocationName":"ABCD","MTML":1},{"LocationID":12345,"LocationName":"LMNO","MTML":3}]';
SET @updatedJson = JSON_MODIFY(@Json, '$[0].MTML', 0);
SELECT @updatedJson;
我知道我可以添加另一个语句,像这样:
SET @updatedJson = JSON_MODIFY(@updatedJson, '$1.MTML', 0);
到上面的查询,并更新第二个JSON对象。但我想看到一些通用的方法来做到这一点,而不是针对特定的数组元素。
非常感谢任何帮助!
英文:
I am using Microsoft SQL server, and I have a variable in SQL that contains a JSON array. Now, I am trying to update one property and set it to 0 for all the JSON objects inside the JSON array.
I have tried the following query, but it just updates the first JSON object.
DECLARE @Json varchar(MAX), @updatedJson varchar(MAX);
SET @Json ='[{"LocationID":1234,"LocationName":"ABCD","MTML":1},{"LocationID":12345,"LocationName":"LMNO","MTML":3}]'
SET @updatedJson = JSON_MODIFY(@Json, '$[0].MTML', 0);
SELECT @updatedJson;
I know that I can add one more statement like:
SET @updatedJson = JSON_MODIFY(@updatedJson, '$[1].MTML', 0);
to the above query and update the second JSON object. But I would like to see some suggestions to do this in a generic way and not for specific array elements.
Would highly appreciate any help!
答案1
得分: 1
你可以使用 OPENJSON
解析 JSON 文本并将 JSON 输入中的对象和属性返回为行和列,然后使用 JSON_MODIFY
单独更新每个对象,最后使用 STRING_AGG
构建更新后的 JSON。
SELECT @updatedJson = CONCAT('[', STRING_AGG(JSON_MODIFY([value], '$.MTML', 0), ',') WITHIN GROUP (ORDER BY CONVERT(int, [key])), ']')
FROM OPENJSON(@Json);
英文:
You can do it using OPENJSON
that parses JSON text and returns objects and properties from the JSON input as rows and columns and JSON_MODIFY
to update each object individually, then STRING_AGG
to build the updated JSON
SELECT @updatedJson = CONCAT('[', STRING_AGG(JSON_MODIFY([value], '$.MTML', 0), ',') WITHIN GROUP (ORDER BY CONVERT(int, [key])), ']')
FROM OPENJSON(@Json);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论