У меня есть столбец больших двоичных объектов JSON (например, группы) в пользовательской таблице, которая содержит объект json следующим образом:
{Security:[1,5],Reporting:[2,8]}
Если я попытаюсь запросить эту таблицу с помощью JSON_QUERY, я получу плохо отформатированную ошибку. Так, например,
SELECT JSON_QUERY([Groups],'$.Security') from User
Возврат
Текст JSON отформатирован неправильно. Неожиданный символ "S" обнаружен в позиции 1.
Причина в том, что большие двоичные объекты JSON на сервере SQL, похоже, настаивают на двойных кавычках для атрибутов объекта. Итак, если приведенный выше JSON выглядит так (обратите внимание на двойные кавычки), тогда все в порядке.
{"Security":[1,5],"Reporting":[2,8]}
Проблема в том, что я использую ServiceStack в приложении C #, которое автоматически создает этот большой двоичный объект JSON на основе предварительно определенного пользовательского poco и вставляет его непосредственно в БД через API. Когда он вставляет этот большой двоичный объект JSON, как предопределено в POCO, он автоматически вставляет его без двойных кавычек ... вот так.
{Security:[1,5],Reporting:[2,8]}
И снова любой JSON_QUERY sql, который я использую (и должен использовать) в представлениях, потребляющих эти данные, не работает.
Может ли кто-нибудь предложить здесь подход, чтобы разобраться с этим, или некоторые разъяснения относительно того, почему это могло произойти. Кажется, существует несоответствие в том, как данные JSON представлены между кодом C # и SQL-сервером, что делает их несовместимыми.
Спасибо!
JSON blobs in SQL server seem to insist on double quotes on the object attributes.
Так определяется спецификацией JSON. Ключи атрибутов должны иметь двойные кавычки, чтобы JSON был действительным в любой системе. - person   schedule 30.04.2019