如何从 SQL 服务器中的 JSON 数组中删除一个项目

How to delete an item from JSON array in SQL Server

如何从 SQL 服务器中的 JSON 数组中删除一个项目。

这是我的 JSON :

[
  {
    "nodeId": 15,
    "nodeCondition": "needRepairing=true"
  },
  {
    "nodeId": 16,
    "nodeCondition": "needWashing=false"
  }
]

存储在列中。我想通过 nodeId.

删除元素

例如,如果你想删除 nodeId 16,那么你可以试试这个:

DECLARE @YourJson NVARCHAR(MAX) = N'[
{"nodeId":15,"nodeCondition":"needRepairing=true"},
{"nodeId":16,"nodeCondition":"needWashing=false"}
]';
SELECT * FROM (SELECT * FROM OPENJSON(@YourJson) WITH(nodeId 
INT,nodeCondition NVARCHAR(MAX)) WHERE nodeId <> 16) AS R FOR JSON 
AUTO;
GO 

我认为你不能从 JSON 数组中删除一个项目,所以你需要再次解析、过滤和重建 JSON 数组。

Table:

SELECT *
INTO JsonTable
FROM (VALUES
   (N'[
      {"nodeId":13,"nodeCondition":"needRepairing=true"},
      {"nodeId":14,"nodeCondition":"needRepairing=true"},
      {"nodeId":15,"nodeCondition":"needRepairing=true"},
      {"nodeId":16,"nodeCondition":"needWashing=false"}
      ]')
) v (JsonColumn)

声明:

UPDATE JsonTable
SET JsonColumn = (
   SELECT nodeId, nodeCondition
   FROM OPENJSON(JsonColumn) WITH (
      nodeId int '$.nodeId', 
      nodeCondition nvarchar(1000) '$.nodeCondition'
   )
   WHERE nodeId NOT IN (13, 15)
   FOR JSON PATH
)

结果:

JsonColumn
[{"nodeId":14,"nodeCondition":"needRepairing=true"},{"nodeId":16,"nodeCondition":"needWashing=false"}]

请注意,对于 JSON 对象,您可以使用 JSON_MODIFY() 删除特定键,使用 lax 模式和 NULL 作为新值。