如何在Sql Server中替换JSON对象中的完整对象

时间:2018-12-28 10:36:52

标签: sql-server sql-server-json

我试图修改sql中现有的json,并在数组中的每个对象中添加新属性。

我的json如下所示

{"Key":"Employee", "Data":[{"id": "1", "value": "Vogel"},{ "id": "2", "value": "Vogel"}]

现在,我正在尝试在Data属性内的每个对象中添加一个新属性(例如IsDeleted :False)。

我们可以迭代特定属性内的每个对象,该属性本身就是一个数组,并在每个对象中添加属性。

1 个答案:

答案 0 :(得分:2)

一种可能的方法是使用$.Data将JSON字符串的OPENJSON()部分转换为表,使用新的isDeleted列作为JSON来选择行,并修改原始JSON:

DECLARE @json nvarchar(max)
SET @json = N'
    {
    "Key": "Employee", 
    "Data": [
        {"id": "1", "value": "Vogel"},
        {"id": "2", "value": "Vogel"}
    ]
    }';

SELECT @json = JSON_MODIFY(
   @json,
   '$.Data',
   (
   SELECT items.[id], items.[value], 'False' AS [isDeleted]
   FROM OPENJSON(JSON_QUERY(@json, '$.Data')) 
   WITH (
      [id] nvarchar(10),
      [value] nvarchar(100)  
   ) AS items
   FOR JSON PATH
   )
)   

输出:

{
    "Key": "Employee", 
    "Data": [{"id":"1","value":"Vogel","isDeleted":"False"},{"id":"2","value":"Vogel","isDeleted":"False"}]
}