我想在不使用Json_modify
函数的情况下将新值插入随机Json字符串中。我正在使用SQL Server 2016。
例如,让我们说我有一个像这样的Json字符串:
{ "a": { "b": "val"} }
现在我想在Json
字符串中添加一个新对象。添加值为NEW的对象c后,Json
字符串应如下所示:
{ "a": { "b": "val", "c": "NEW"} }
有没有办法在不使用json_modify
的情况下做这样的事情?
我不想将Json
字符串保存到表格中。我之后想要的只是一个SQL Server过程,它将Json
对象添加到定义位置的Json
字符串中。
由于
我如何使用JSON_MODIFY:
执行此操作declare @jsonString nvarchar(4000) = '{"a": {"b":"val"} }'
, @jsonResult nvarchar(4000)
, @path nvarchar(128) = '$.a.c'
, @value nvarchar(128) = 'NEW'
set @jsonResult = JSON_MODIFY(@jsonString, @path, @value)
select @jsonResult
答案 0 :(得分:1)
感谢您的回答和评论。我已经解决了这个问题,但是由于我使用的是外部库,所以无法解决stackoverflow问题。无论哪种方式,这对我来说都是一种锻炼。最后,我花了四个月的时间来解决这个问题,并找到了一个简单的解决方案。如我之前所说,我无法在此处发布它,因为我正在嵌入外部代码,并且该外部代码的作者不允许我公开发布它。
基本上,它是关于在TSQL中以任何深度编辑任意JSON对象。换句话说,添加新元素,删除元素和更改元素,并将更改后的JSON对象作为字符串返回。我也不想使用Microsoft提供的功能“ JSON_MODIFY”。
我有意不想使用JSON_MODIFY,因为此方法仅在较新的SQL Server版本中可用,而在较旧的版本中不可用。当然,有足够的开发人员希望在TSQL中编辑JSON对象,但是具有较旧的SQL Server版本,并且不想为此功能购买新的SQL Server许可证。对于这些人,我的解决方案将非常有帮助。但不幸的是,由于外部代码已集成,因此无法发布。
非常感谢在这里提供帮助的每个人。
答案 1 :(得分:0)
DECLARE @json VARCHAR(MAX)='{ "a": { "b": "val"} }'
--Collect values in tmp table
SELECT * INTO #tbljson FROM OPENJSON(@json,'$.a') WITH ( b VARCHAR(50))
-- Add new column into tmp table
ALTER TABLE #tbljson
ADD c VARCHAR(10) NULL
--Update value to new column
UPDATE #tbljson SET c= 'New' WHERE b='val'
-- get new Json
DECLARE @newJson VARCHAR(max)
SET @newJson=(SELECT * FROM #tbljson FOR JSON PATH, INCLUDE_NULL_VALUES)
-- Update it to original Json.
SET @json= JSON_MODIFY(@json, '$.a',JSON_QUERY(@newJson))
SELECT @json
DROP TABLE #tbljson
这可能是我解决该问题的方法。如果不是Json集合,我将执行字符串操作,而不是字符串操作,然后执行此操作。这是比字符串操作更干净的方法。