在 sql server 中序列化使用 OpenJson() 反序列化的对象

穆罕默德·亚辛

我想序列化一个我已经反序列化的对象OPENJSON()我在 SQL Server 中的 oject 下面存储为NVARCHAR.

{
"Name":"Name1",
"Everyday":false,
"EveryWeek":true,
"RecurRange":"12-Apr-2022$12-Sep-2022"
}

为了使用 替换 Name 字段OPENJSON(),我反序列化了,存储在一个临时表中,其中 key、value 作为列,更新了 Name。

现在我想将该表序列化回初始格式。尝试使用转换FOR JSON AUTO

CREATE TABLE #InfoTable([Key] NVARCHAR(MAX),Value NVARCHAR(MAX),Type INT)
INSERT INTO #InfoTable SELECT * FROM OpenJson(@jsondata)
UPDATE #InfoTable SET Value = 'NewName' WHERE [Key] = 'Name'
DECLARE @NewJson NVARCHAR(MAX) = (select * FROM #InfoTable FOR JSON AUTO)

但似乎不起作用:

[
{"Key":"Name","Value":"NewName","Type":1},
{"Key":"Everyday","Value":"false","Type":3},
{"Key":"EveryWeek","Value":"true","Type":2},
{"Key":"RecurRange","Value":"18-Apr-2022$14-May-2022","Type":1}
]

有没有办法将 OpenJson 返回的表转换回字符串?

若罗夫

如果要修改单个 JSON 对象中键的值,则需要JSON_MODIFY()

DECLARE @jsondata nvarchar(max) = N'{"Name":"Name1","Everyday":false,"EveryWeek":true,"RecurRange":"12-Apr-2022$12-Sep-2022"}'

SELECT @jsondata = JSON_MODIFY(
   @jsondata,
   '$.Name',
   'NewName'
)
SELECT @jsondata

如果要使用当前方法,则需要使用OPENJSON()显式模式:

DECLARE @jsondata nvarchar(max) = N'{"Name":"Name1","Everyday":false,"EveryWeek":true,"RecurRange":"12-Apr-2022$12-Sep-2022"}'

SELECT *
INTO #InfoTable 
FROM OPENJSON(@jsondata) WITH (
   Name nvarchar(max),
   Everyday bit,
   EveryWeek bit,
   RecurRange nvarchar(max)
)
UPDATE #InfoTable 
SET Name = 'NewName' 

DECLARE @newjson NVARCHAR(MAX) = (
   SELECT * 
   FROM #InfoTable 
   FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER
)
SELECT @newjson

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章