Transact-SQL ISJSON函数不接受标量吗?

时间:2019-07-04 10:39:12

标签: json sql-server tsql

我正在尝试在MS-SQL 2016中创建一列,该列应该是有效的JSON,但不一定是JSON对象或数组。

当我发现ISJSON函数无法按预期工作时,我尝试使用ISJSON函数作为检查约束。该文档没有提及有关标量值或对象的任何内容,因此它应适用于带引号的字符串,因为它是有效的JSON值。我尝试使用单引号,转义引号等,但是没有帮助。

在标量字符串上使用ISJSON:

SELECT ISJSON('"test"')   <--- result is 0

奇怪的是,接受了以下内容:

SELECT ISSJON('["test"]')   <--- result is 1

因此,当放入数组中时,相同的标量值将被接受为JSON,但不能单独接受。 Microsoft是否不符合JSON标准?

1 个答案:

答案 0 :(得分:2)

站点https://jsonformatter.curiousconcept.com表示"test"不是根据RFC 4627ECMA-404的有效JSON,而是根据RFC 7159的有效JSON。 JSON规范的最新版本是RFC 8529,它表示:“请注意,某些以前的JSON规范将JSON文本约束为对象或数组。”

SQL Server似乎实现了第一个JSON规范,因为这是SQL Server documentation中提到的。