json - 使用 JSON_MODIFY 附加到空白列失败,并出现 "Unexpected character ' .' is found at position 0"错误

标签 json sql-server

我有一个 SQL Server 表,其中有一个 NVARCHAR(MAX) NOT NULL 列,默认值为空字符串。检查约束检查内容是否为有效的 JSON(如果它不为 null 或空字符串):

CHECK ((ISNULL(ISJSON(NULLIF([MyJSONColumn],'')), (1)) = (1)

如果列已包含一些 JSON,例如以下内容:

["This is some original stuff"]

然后我可以使用 JSON_MODIFY 附加到它。

例如,这有效:

UPDATE t
SET t.MyJSONColumn = JSON_MODIFY(t.MyJSONColumn, 'append $', '"This is some appended stuff."')
FROM dbo.MyTable t
WHERE t.PrimaryKey = 1

如果我从表中选择:

SELECT MyJsonColumn 
FROM dbo.MyTable 
WHERE PrimaryKey = 1

我得到了附加的 JSON,如下所示:

["This is some original stuff","This is some appended stuff."]

一切都很好。但是,如果我在列为空字符串时尝试完全相同的 JSON_MODIFY 更新,则会收到此错误:

JSON text is not properly formatted. Unexpected character '.' is found at position 0.

我最初设置空白 MyJSONColumn 值的唯一方法是执行类似的操作。这可行,但当然非常难看:

UPDATE t
SET t.MyJSONColumn = '["This is some stuff."]')

在列中获得初始值后,我可以使用 JSON_MODIFY 附加到它。

我可以使用 JSON_MODIFY 来设置该初始值吗?我尝试添加“lax”修饰符,但仍然收到错误(即“append lax $”)。

最佳答案

我建议更改列的默认值,因为空字符串不是有效的 JSON。因此,当您将其作为第一个参数传递给 JSON_MODIFY() 函数时,可以预见的是,它会不同意。

根据您的需要,它可能是根数组:

declare @s nvarchar(max) = '[]';
set @s = JSON_MODIFY(@s, 'append $', N'This is some appended stuff.');
select @s;

或更详细(但可扩展)的结构:

declare @s nvarchar(max) = '{ "Values" : [] }';
set @s = JSON_MODIFY(@s, 'append $.Values', N'This is some appended stuff.');
select @s;

附注作为值的一部分传递的双引号会被转义;如果您不需要,请将它们从传入值中删除,如我的示例所示。

关于json - 使用 JSON_MODIFY 附加到空白列失败,并出现 "Unexpected character ' .' is found at position 0"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70028734/

相关文章:

java - 如何在 Jersey Trace 中打印漂亮的 JSON?

sql-server - 使用脚本更改 SQL Server 身份验证模式

sql-server - 返回 SQL Server 数据库中以 varchar 作为参数的所有存储过程列表的查询

c# - ASP.NET MVC - 应用程序预热 - 使用两种方法中的哪一种?

c# - 什么是 API 用法?

java - 如何为类的所有字段编写通用的自定义GSON反序列化器?

javascript - 在输出之前随机化 JSON 内容的内容

Swift 中的 JSON 反序列化

java - Moshi + Retrofit - 处理 JSON 响应

sql-server - 试图将 Pandas 数据框插入临时表