在SQL Server 2016中向json字符串添加新值

时间:2018-04-29 07:45:42

标签: sql json sql-server

我想在不使用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

2 个答案:

答案 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集合,我将执行字符串操作,而不是字符串操作,然后执行此操作。这是比字符串操作更干净的方法。