首页 > 解决方案 > 如何使用 JSON_MODIFY 将 int json 值转换为单长数组?

问题描述

我们有自定义过滤器的网格,您可以将过滤器作为 JSON 对象保存到特定表tblUserPersistedValue(以及用户字段)。因此,我们正在更新页面,并且过滤器将从单选 ID 变为四个不同过滤器上的多选 ID。

当前的 JSON:

'{
"ProductGroupID":1,
"TerminalID":1,
"CarrierID":1221,
"RegionID":21,
"DriverDateFilter":0,
"DriverStartDate":"0001-01-01T00:00:00",
"DriverEndDate":"0001-01-01T00:00:00"
}';

如您所见"TerminalID":1,我想将其更改为,"TerminalID":[1] 以便我们在进行更新时不会破坏任何用户的设置。不幸的是,我无法弄清楚如何使用JSON_MODIFY 创建一个 int 数组。 我快到了,但它将我保存在引号中的值包装起来,并且在反序列化期间不会解析为 int 数组。

我以前从未直接在 sql 中使用过 json,而且我一定遗漏了一些简单的东西。我如何解决它?如果无法覆盖现有条目,我还可以创建一个新的 TerminalIDs 条目来解析并删除旧条目。

最终目标是对表中的每条记录执行此操作,对四个字段中的每一个执行一次。

标签: jsonsql-servertsql

解决方案


declare @j nvarchar(max) = N'{"ProductGroupID":1,"TerminalID":1,"CarrierID":1221,"RegionID":21,"DriverDateFilter":0,"DriverStartDate":"0001-01-01T00:00:00","DriverEndDate":"0001-01-01T00:00:00"}';
select @j = json_modify(@j, '$.TerminalID', json_query(concat('[', json_value(@j, '$.TerminalID') ,']')));
select @j;

推荐阅读