как исправить SQL-сервер Json-текст неправильно отформатирован. Неожиданный символ найден на позиции 151

Я работаю над таблицей, в которой есть столбец в формате 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

Я предполагаю, что у меня есть строка, которая вызывает ошибку, но я не знаю, как ее идентифицировать или исключить эту строку и вернуть результаты.


person Zeir    schedule 27.10.2020    source источник


Ответы (2)


Мне удалось обойти проблему с этим оператором where на случай, если у кого-то возникнет такая же проблема, надеюсь, это поможет!

Select *,JSON_QUERY(field,'$."Coordinate-X"[0]') As coordinate FROM table
WHERE field like '%Coordinate-X%'
and ISJSON(field)=1
person Zeir    schedule 01.11.2020

похоже, что у вас есть неверные данные (в вашем случае двойная кавычка) в поле 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"}]

person eshirvana    schedule 27.10.2020
comment
Я также попытался добавить его в свое предложение where, так как увидел, что кто-то исправил с ним аналогичную проблему. Но это не помогло моему делу. Я все еще получаю ту же ошибку :( Выберите *, JSON_VALUE (поле, '$. Координата-X [0]') В качестве координаты В ТАБЛИЦУ_1 ИЗ таблицы, ГДЕ ISJSON (поле) › 0 И JSON_VALUE (поле, '$. Координата-X [ 0]') НЕ НУЛЕВОЕ - person Zeir; 28.10.2020
comment
предоставьте нам некоторые образцы данных - person eshirvana; 28.10.2020