org.codehaus.jackson.JsonParseException: неожиданный символ ('�' (код 65533 / 0xfffd))

У меня есть строка Json в базе данных, но при преобразовании в объект Java она дает следующую ошибку:

Вызвано: org.codehaus.jackson.JsonParseException: неожиданный символ ('�' (код 65533 / 0xfffd)): ожидалось допустимое значение (число, строка, массив, объект, 'true', 'false' или 'null')

Json: {"crt":"wrd","name":"7|6A TTTM"}

В java-коде я настроил его и сделал частным (не статическим окончательным)

objectMapper= new ObjectMapper();
objectMapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

Примечание. Он некоторое время преобразует эту строку Json в объект, но некоторое время дает указанную выше ошибку. Почему наступает такой неожиданный результат?


person Nikhil soni    schedule 05.06.2015    source источник
comment
Вероятно, он сталкивается с какой-то последовательностью байтов, которую не может правильно декодировать, что приводит к замене символа. Проверьте настройки кодировки.   -  person nhahtdh    schedule 05.06.2015
comment
Я не указал никаких настроек кодировки.   -  person Nikhil soni    schedule 05.06.2015
comment
Как установить кодировку?   -  person Nikhil soni    schedule 05.06.2015
comment
@Nikhilsoni, можете ли вы показать код при создании входного потока? а также какая кодировка была при создании json?   -  person kucing_terbang    schedule 05.06.2015
comment
@kucing_terbang: код - objectMapper.writeValueAsString (obj), а конфигурация указана выше   -  person Nikhil soni    schedule 05.06.2015
comment
@Nikhilsoni хм, хорошо, но как вы вообще создали obj? Я просто хочу убедиться, что когда вы генерируете obj, вы устанавливаете кодировку примерно как UTF-8 или, по крайней мере, такую ​​же кодировку по умолчанию, которую вы используете на платформе, где вы запускаете этот код.   -  person kucing_terbang    schedule 06.06.2015


Ответы (3)


Решение для краткого ответа: удалите первое вхождение дополнительного добавленного текста спецификации с помощью следующего метода, который должен решить эту проблему:

public String cleanUpJsonBOM(String json) {
      return json.trim().replaceFirst("\ufeff", "");
  }

У меня была аналогичная проблема, которую я описал в сообщении в блоге < / а>. Надеюсь на эту помощь!

person Mihnea    schedule 21.04.2017
comment
пожалуйста, разместите соответствующий контент по ссылке - person Robert; 21.04.2017
comment
Сделанный! Спасибо за предложение! - person Mihnea; 22.04.2017

это сработало для меня.

String formattedString = yourString.trim().replaceAll("\uFFFD", "");
person Priyamal    schedule 04.12.2017

Что-то создает недопустимую последовательность UTF-8 (или несоответствие UTF-8 однобайтовой кодировке, такой как ISO-8859-1), и Джексон обнаруживает эту проблему с кодировкой. Это не имеет ничего общего с настройкой ACCEPT_SINGLE_VALUE_AS_ARRAY, поскольку исключение исходит из JsonParser нижнего уровня.

Итак, вам нужно выяснить, почему контент JSON для анализа поврежден.

person StaxMan    schedule 08.06.2015
comment
Благодарю за ответ. Основным виновником был экземпляр кластера серверов WildFly, на котором развернуто мое приложение. Это было нестабильно. После перезапуска парсинг работает нормально. - person Nikhil soni; 09.06.2015