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 Access VB 中访问 SQL Server 标量函数
在 SQL Server 查询中复制 MS Access “First”函数
PCB MS SQL 标量函数(CLR) 实现转Json方法