JSON_MODIFY 删除数组对象

ksp*_*rin 5 sql t-sql sql-server

如何从VARCHAR(MAX)JSON 数组中删除对象?

设置

DECLARE @Json VARCHAR(MAX) =
JSON_QUERY('[{"u":"user1","i":"item1"},{"u":"user2","i":"item2"}]')

SELECT @Json

DECLARE @NewJson VARCHAR(MAX) =
JSON_QUERY('{"u":"user3","i":"item3"}')

SELECT @NewJson
Run Code Online (Sandbox Code Playgroud)

结果

[{"u":"user1","i":"item1"},{"u":"user2","i":"item2"}]

{"u":"user3","i":"item3"}
Run Code Online (Sandbox Code Playgroud)

附加@NewJson@Json

SELECT JSON_MODIFY(@Json, 'append $', JSON_QUERY(@NewJson))
Run Code Online (Sandbox Code Playgroud)

结果

[{"u":"user1","i":"item1"},{"u":"user2","i":"item2"},{"u":"user3","i":"item3"}]
Run Code Online (Sandbox Code Playgroud)

都好。

0从中删除索引@Json

SELECT JSON_MODIFY(@Json, '$[0]', NULL)
Run Code Online (Sandbox Code Playgroud)

结果

[null,{"u":"user2","i":"item2"}]
Run Code Online (Sandbox Code Playgroud)

我不希望索引0为空。我想把它去掉。

我在文档中找不到任何说明如何从数组中删除对象的内容。

Ala*_*ein 1

我没有使用过 json 但是,因为它是一个字符串,你可以这样做;

SET @Json = JSON_MODIFY(@Json, '$[0]', NULL);
SET @Json = STUFF(@Json, CHARINDEX ('null,', 5, '');
Run Code Online (Sandbox Code Playgroud)

请注意,我目前无法测试此代码。