Функция Transact-SQL ISJSON не принимает скаляры? - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь создать столбец в MS-SQL 2016, который должен быть допустимым JSON, но не обязательно должен быть объектом JSON или массивом.

Я пытался использовать функцию ISJSON в качествепроверка-ограничение, когда я узнал, что это не работает, как ожидалось.В документации ничего не говорится о скалярных значениях или объектах, поэтому он должен работать для строки в кавычках, так как это допустимое значение JSON.Я пробовал с одинарными кавычками, экранированием кавычек и т. Д., Но ничего не помогает.

Использование ISJSON для скалярной строки:

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

Как ни странно, принимается следующее:

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

Таким образом, то же скалярное значение принимается как JSON, когда помещается в массив, но не принимается само по себе.Разве Microsoft не соответствует стандарту JSON здесь?

1 Ответ

2 голосов
/ 04 июля 2019

Сайт https://jsonformatter.curiousconcept.com говорит, что "test" не является действительным JSON в соответствии с RFC 4627 или ECMA-404 , но является действительным JSON в соответствии с RFC 7159 .Последней версией спецификации JSON является RFC 8529 , в которой говорится: «Обратите внимание, что некоторые предыдущие спецификации JSON ограничивали текст JSON объектом или массивом».

Похоже, что SQL Server реализовал первую спецификацию JSON, потому что она упоминается в документации SQL Server .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...