JsonParseException: Незаконні символи без котирувань ((CTRL-CHAR, код 10)


94

Я намагаюся використати org.apache.httpcomponentsRest API, який буде розміщувати дані формату JSON в API.

Я отримую цей виняток:

Викликано: com.fasterxml.jackson.core.JsonParseException: Незаконні символи без котирувань ((CTRL-CHAR, код 10)): потрібно уникнути, використовуючи зворотну риску, щоб включити в рядок.

Причиною є те, що ctrl-charвключено до рядка JSON.

Чи є спосіб замінити це чи якесь інше рішення?


1
Ви створюєте JSON самостійно? По суті, це схоже на те, що у вас зіпсовані дані ... так що або виправте їх, якщо можете, або поскаржіться тому, хто їх виробляє.
Джон Скіт,

1
Як обговорювалось у цій відповіді StackOverflow , чи правильно перевіряє ваш JSON через jsonlint.com ?
Ерік Маккормік

Ідея Intellij перевіряє її, як тільки ви відкриваєте файл .json. Спробуй це!
Gaurav

Відповіді:


84

Це може статися, якщо у вас є рядок нового рядка (або інший керуючий символ) у літералі рядка JSON.

{"foo": "bar
baz"}

Якщо ви виробляєте дані, замінюйте фактичні нові рядки на екрановані "\\n"при створенні рядкових літералів.

{"foo": "bar\nbaz"}

56

Використовуючи

mapper.configure(
    JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), 
    true
);

Дивіться javadoc :

/**
 * Feature that determines whether parser will allow
 * JSON Strings to contain unescaped control characters
 * (ASCII characters with value less than 32, including
 * tab and line feed characters) or not.
 * If feature is set false, an exception is thrown if such a
 * character is encountered.
 *<p>
 * Since JSON specification requires quoting for all control characters,
 * this is a non-standard feature, and as such disabled by default.
 */

Стара опція JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARSзастаріла з 2.10.

Будь ласка, дивіться також потік github .


як реалізувати це в xml? Я маю <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="objectMapper"> <bean class="com.fasterxml.jackson.databind.ObjectMapper"> <property name="serializationInclusion" value="NON_NULL"/> </bean> </property> <property name="supportedMediaTypes" value="application/json"/> </bean> </mvc:message-converters> </mvc:annotation-driven> . Я використовую Jackson 2.7. та весна 4.3.2
Судеп Шакья

Чому б вам не спробувати це: stackoverflow.com/questions/5349362 / ... Або переобумовленої , що боб: MappingJackso n2HttpMessageConvert ер
Хоанг

@hoang, де це затримати в Java, оскільки я намагаюся отримати ці незаконні дані, я поставив запитання, яке тут stackoverflow.com/questions/49676720/… , чи можете ви допомогти мені?
Віпул Сінгх

дякую, справді корисно, імпорт, який я використав, був: com.fasterxml.jackson.core.JsonParser.Feature;
Jesús Sánchez

1

На платформі Salesforce ця помилка спричинена /, рішення полягає в тому, щоб уникнути їх як //.


2
Для мене - на платформі Salesforce - насправді було потрібно "\" до "\\". Принаймні в моєму випадку це сталося через нові символи рядка в моєму JSON. \nдовелося змінити на \\n. Це пов’язано з тим, що JSON вимагає керуючих символів, які потрібно уникати. Подивіться цей чудовий коментар тут .
мальте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.