#sql #json-query #json-value
#sql #json-запрос #json-значение
Вопрос:
Я работаю над таблицей, в которой есть столбец в формате JSON, и я хочу извлечь значение координаты из этого столбца.
Итак, я запускаю следующий код:
Select *,JSON_VALUE(field,'$."Coordinate-X"[0]') As coordinate INTO TABLE_1 FROM table
WHERE JSON_VALUE(field,'$."Coordinate-X"[0]') IS NOT NULL
И я получаю следующую ошибку после 5 минут работы
Сообщение 13609, уровень 16, состояние 1, строка 27 Текст Json отформатирован неправильно. Неожиданный символ «»» обнаружен в позиции 151.
Когда я пытаюсь проверить некоторые строки с верхним значением 200 * ниже, код возвращает результаты без каких-либо ошибок
Select TOP 200 *,JSON_QUERY(field,'$."Coordinate-X"[0]') As coordinate FROM table
WHERE JSON_VALUE(field,'$."Coordinate-X"[0]') IS NOT NULL
Я предполагаю, что у меня есть строка, которая вызывает ошибку, но я не знаю, как ее идентифицировать или исключить эту строку и вернуть результаты.
Ответ №1:
Мне удалось обойти проблему с помощью этого оператора where на случай, если у кого-то возникнет такая же проблема, я надеюсь, это поможет!
Select *,JSON_QUERY(field,'$."Coordinate-X"[0]') As coordinate FROM table
WHERE field like '%Coordinate-X%'
and ISJSON(field)=1
Ответ №2:
похоже, у вас неверные данные (в вашем случае двойная цитата) в вашем поле JSON. ваш TOP 200 выполняется успешно, потому что этот плохой символ не отображается в TOP 200.. Я предлагаю, если у вас нет ограничения проверки для этого столбца, добавить его, чтобы избежать плохого
ALTER TABLE tablename ADD CONSTRAINT JSON_CHECK CHECK (ISJSON(field) = 1 )
символ в ваших данных JSON:
., чтобы добавить двойные кавычки как часть значений в вашем JSON, он должен выглядеть следующим образом : "JSON Value with " in the value"
например [{"Id":3,"Title":"JSON Value with " in the value"}]
Комментарии:
1. Я также попытался добавить его в свое предложение where, поскольку видел, что кто-то исправил аналогичную проблему с ним. Но это не помогло моему делу. Я по-прежнему получаю ту же ошибку: (Выберите *,JSON_VALUE(поле, ‘$.»Coordinate-X»[0]’) В качестве координаты В TABLE_1 ИЗ таблицы, ГДЕ ISJSON(поле)> 0 И JSON_VALUE(поле, ‘$.»Coordinate-X»[0]’) НЕNULL
2. предоставьте нам несколько примеров данных