Arrays 在T-SQL中更新/添加json数组的属性
我看到的所有处理json数组的方法都将数组嵌套在顶级对象下。我在一列中有一个json数组: [{key:value1},{key:value2}] 我想运行sql脚本为数组中的每个元素添加/更新一个键,从而产生: [{key:value1,otherKey:otherValue},{key:value,otherKey:otherValue}] 是的,在我的例子中,我希望为每个数组成员设置相同的值。我试过:Arrays 在T-SQL中更新/添加json数组的属性,arrays,json,sql-server,Arrays,Json,Sql Server,我看到的所有处理json数组的方法都将数组嵌套在顶级对象下。我在一列中有一个json数组: [{key:value1},{key:value2}] 我想运行sql脚本为数组中的每个元素添加/更新一个键,从而产生: [{key:value1,otherKey:otherValue},{key:value,otherKey:otherValue}] 是的,在我的例子中,我希望为每个数组成员设置相同的值。我试过: declare @info nvarchar(max) SET @info = '[{
declare @info nvarchar(max)
SET @info = '[{"key": "value1"}, {"key": "value2"}]'
print JSON_MODIFY(@info, '[0].otherKey', '""')
并且由于JSON路径格式不正确而失败。在位置0处发现意外字符“[”
这是在MSSQL 2017中。您是否尝试过在索引器符号前添加$?例如:
declare @info nvarchar(max)
SET @info = '[{"key": "value1"}, {"key": "value2"}]'
SELECT JSON_MODIFY(@info, '$[0].otherKey', '""')
这将提供以下输出:
[{"key": "value1","otherKey":"\"\""}, {"key": "value2"}]
您是否尝试过在索引器符号之前添加$?例如:
declare @info nvarchar(max)
SET @info = '[{"key": "value1"}, {"key": "value2"}]'
SELECT JSON_MODIFY(@info, '$[0].otherKey', '""')
这将提供以下输出:
[{"key": "value1","otherKey":"\"\""}, {"key": "value2"}]
可以使用的方法取决于JSON结构,我假设JSON数组中的项目计数不是固定的: 如果输入JSON数组包含带有固定键的items JSON对象,则可以使用OPENJSON与显式模式的组合,将此JSON解析为表,并使用JSON修改并返回JSON行 如果输入JSON有不同结构的项,您可以使用OPENJSON与默认模式、JSON_MODIFY和STRING_AGG的组合。 JSON: 固定结构声明:
SELECT @info = (
SELECT [key], 'OtherValue' AS OtherKey
FROM OPENJSON(@info) WITH ([key] varchar(100) '$.key')
FOR JSON PATH
)
SELECT @info = CONCAT('[', STRING_AGG(JSON_MODIFY([value], '$.OtherKey', 'OtherValue'), ','), ']')
FROM OPENJSON(@info)
SELECT @info
变量结构的声明:
SELECT @info = (
SELECT [key], 'OtherValue' AS OtherKey
FROM OPENJSON(@info) WITH ([key] varchar(100) '$.key')
FOR JSON PATH
)
SELECT @info = CONCAT('[', STRING_AGG(JSON_MODIFY([value], '$.OtherKey', 'OtherValue'), ','), ']')
FROM OPENJSON(@info)
SELECT @info
结果:
[{"key":"value1","OtherKey":"OtherValue"},{"key":"value2","OtherKey":"OtherValue"}]
请注意,此错误的原因是路径参数[0]的值错误。otherKey错误。正确的路径表达式为$[0]。JSON数组中第一个项的otherKey。可以使用的方法取决于JSON结构,我假设JSON数组中的项计数不固定: 如果输入JSON数组包含带有固定键的items JSON对象,则可以使用OPENJSON与显式模式的组合,将此JSON解析为表,并使用JSON修改并返回JSON行 如果输入JSON有不同结构的项,您可以使用OPENJSON与默认模式、JSON_MODIFY和STRING_AGG的组合。 JSON: 固定结构声明:
SELECT @info = (
SELECT [key], 'OtherValue' AS OtherKey
FROM OPENJSON(@info) WITH ([key] varchar(100) '$.key')
FOR JSON PATH
)
SELECT @info = CONCAT('[', STRING_AGG(JSON_MODIFY([value], '$.OtherKey', 'OtherValue'), ','), ']')
FROM OPENJSON(@info)
SELECT @info
变量结构的声明:
SELECT @info = (
SELECT [key], 'OtherValue' AS OtherKey
FROM OPENJSON(@info) WITH ([key] varchar(100) '$.key')
FOR JSON PATH
)
SELECT @info = CONCAT('[', STRING_AGG(JSON_MODIFY([value], '$.OtherKey', 'OtherValue'), ','), ']')
FROM OPENJSON(@info)
SELECT @info
结果:
[{"key":"value1","OtherKey":"OtherValue"},{"key":"value2","OtherKey":"OtherValue"}]
请注意,错误的原因是路径参数[0]的值错误。otherKey错误。正确的路径表达式为$[0]。JSON数组中第一项的otherKey