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

#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. предоставьте нам несколько примеров данных