如果 SQL 中不存在键,如何将键和值添加到 JSON

问题描述 投票:0回答:1

我输出 json 为

DECLARE @ouptputJson nvarchar(max)='[
  {
    "Name": "BSData",
    "Value": ""
  },
  {
    "Name": "ISData",
    "Value": "{\"WC\":{\"IL\":\"false\",\"SCB\":\"false\"},\"RC\":[{\"PrimaryKeys\":\"\",\"BackupMode\":\"NONE\"}],\"SIData\":{\"builderId\":\"4567\",\"column\":{\"EP_Key\":\"5678\"}}}"
  }
]'

在@ouptputJson中,我需要在“column”对象下搜索键“Battery”,如果在@ouptputJson中找不到Battery键,那么我需要添加(key,value),如下所示

  {
    "Name": "BSData",
    "Value": ""
  },
  {
    "Name": "ISData",
    "Value": "{\"WC\":{\"IL\":\"false\",\"SCB\":\"false\"},\"RC\":[{\"PrimaryKeys\":\"\",\"BackupMode\":\"NONE\"}],\"SIData\":{\"builderId\":\"4567\",\"column\":{\"Battery\":\"Epr Oxygen\",\"EP_Key\":\"5678\"}}}"
  }
]'

我已经尝试过这种方式

Declare @ouptputJson nvarchar(max)='[
  {
    "Name": "BSData",
    "Value": ""
  },
  {
    "Name": "ISData",
    "Value": "{\"WC\":{\"IL\":\"false\",\"SCB\":\"false\"},\"RC\":[{\"PrimaryKeys\":\"\",\"BackupMode\":\"NONE\"}],\"SIData\":{\"builderId\":\"4567\",\"column\":{\"EP_Key\":\"5678\"}}}"
  }
]'



SELECT
          j1.Name,
          Value = CASE WHEN j1.Name = 'ISData'
               THEN JSON_MODIFY(j1.value, 'append $.Battery', 'Epr Oxygen')
               ELSE j1.Value
               END
        FROM OPENJSON (@ouptputJson)
          WITH (
            Name nvarchar(100),
            Value nvarchar(max)
          ) j1
        FOR JSON PATH;

但它在列对象之外添加关键电池

[{"Name":"BSData","Value":""},{"Name":"ISData","Value":"{\"WC\":{\"IL\":\"false\",\"SCB\":\"false\"},\"RC\":[{\"PrimaryKeys\":\"\",\"BackupMode\":\"NONE\"}],\"SIData\":{\"builderId\":\"4567\",\"column\":{\"EP_Key\":\"5678\"}},\"Battery\":[\"Epr Oxygen\"]}"}]

sql json
1个回答
0
投票

json 路径 应该是

$.SIData.column.Battery
:

SELECT j1.Name,
       Value = CASE WHEN j1.Name = 'ISData'
               THEN JSON_MODIFY(j1.value, 'append $.SIData.column.Battery', 'Epr Oxygen')
               ELSE j1.Value
               END
FROM OPENJSON (@ouptputJson)
     WITH (
            Name nvarchar(100),
            Value nvarchar(max)
     ) j1
FOR JSON PATH;

演示在这里

© www.soinside.com 2019 - 2024. All rights reserved.