MS SQL Server 中 JSON 函数路径中的重音字符导致错误

Posted

技术标签:

【中文标题】MS SQL Server 中 JSON 函数路径中的重音字符导致错误【英文标题】:Accent character in path of JSON functions in MS SQL Server cause error 【发布时间】:2020-11-22 00:18:13 【问题描述】:

我们将一些 JSON 作为 NVARCHAR 保存在我们的数据库中。在插入之前,我们使用“IsJSON”函数验证 JSON。问题是我们在“Malārd”之类的键中有一个带有重音字符的 JSON。 IsJson 返回 1 表示它是一个有效的 JSON,但是当我们尝试在诸如 '$.Malārd' 之类的路径中使用它时,会导致以下错误:

-- QUERY
SELECT JSON_VALUE(N'"Malārd":1000', N'$.Malārd')
-- OUTPUT
-- JSON path is not properly formatted. Unexpected character 'ā' is found at position 5

如果必须,我会阻止在键中插入重音字符,但我希望找到更好的解决方案。

我知道我可以替换重音字符并使用 COLLATE LATIN1_GENERAL_CS_AI 之类的技巧,但我们的项目中有一些基础设施工具和 API,允许客户端开发人员插入和获取各种 JSON 模型。

【问题讨论】:

【参考方案1】:

如果键名以美元符号开头或包含特殊字符,则需要用引号将 path 表达式括起来:

SELECT JSON_VALUE(N'"Malārd":1000', N'$."Malārd"')

【讨论】:

以上是关于MS SQL Server 中 JSON 函数路径中的重音字符导致错误的主要内容,如果未能解决你的问题,请参考以下文章

MS SQL Server 查询后返回 JSON

如何在 MS Access VB 中访问 SQL Server 标量函数

在 SQL Server 查询中复制 MS Access “First”函数

PCB MS SQL 标量函数(CLR) 实现转Json方法

类似于 MySQL FIELD() 函数的 MS SQL Server 功能是啥?

MS SQL Server有没有查找字符串位置的函数