我输出 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\"]}"}]
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;