2017-04-15 116 views
2

如何从VARCHAR(MAX) JSON阵列中删除对象?JSON_MODIFY删除阵列对象

设置
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 

结果

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

{"u":"user3","i":"item3"} 

追加@NewJson@Json

SELECT JSON_MODIFY(@Json, 'append $', JSON_QUERY(@NewJson)) 

结果

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

一切都好。从@Json

SELECT JSON_MODIFY(@Json, '$[0]', NULL) 

结果

[null,{"u":"user2","i":"item2"}] 

删除索引0我不想指数0为空。我希望它被删除。

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

回答

1

我还没有与JSON合作,但是,因为它是一个字符串,你可以这样做;

SET @Json = JSON_MODIFY(@Json, '$[0]', NULL); 
SET @Json = STUFF(@Json, CHARINDEX ('null,', 5, ''); 

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

+0

漂亮哈克,但我想它的工作原理如果TSQL不提供本机功能。 – kspearrin