JsonParseException: Unzulässiges Zeichen ohne Anführungszeichen ((STRG-CHAR, Code 10)


93

Ich versuche, org.apache.httpcomponentseine Rest-API zu verwenden, die Daten im JSON-Format an die API sendet.

Ich bekomme diese Ausnahme:

Auslöser: com.fasterxml.jackson.core.JsonParseException: Unzulässiges Zeichen ohne Anführungszeichen ((STRG-CHAR, Code 10)): muss mit einem Backslash maskiert werden, um in die Zeichenfolge aufgenommen zu werden.

Der Grund dafür ist, dass ctrl-charin der JSON-Zeichenfolge enthalten ist.

Gibt es eine Möglichkeit, diese oder eine andere Lösung zu ersetzen?


1
Erstellen Sie den JSON selbst? Grundsätzlich klingt es so, als hätten Sie kaputte Daten ... also reparieren Sie sie entweder, wenn Sie können, oder beschweren Sie sich bei demjenigen, der sie produziert.
Jon Skeet


Die Intellij-Idee überprüft sie, sobald Sie die .json-Datei öffnen. Versuch es!
Gaurav

Antworten:


83

Dies kann passieren, wenn Sie eine neue Zeile (oder ein anderes Steuerzeichen) in einem JSON-Zeichenfolgenliteral haben.

{"foo": "bar
baz"}

Wenn Sie die Daten erstellen, ersetzen Sie "\\n"beim Erstellen Ihrer Zeichenfolgenliterale die tatsächlichen Zeilenumbrüche durch maskierte Zeilenumbrüche .

{"foo": "bar\nbaz"}

55

Verwenden von

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

Siehe 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.
 */

Die alte Option JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARSwar seit 2.10 veraltet.

Siehe auch Github-Thread .


Wie implementiere ich das in XML? Ich habe <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> . Ich benutze Jackson 2.7. und Spring4.3.2
SudeepShakya

Warum versuchen Sie das nicht: stackoverflow.com/questions/5349362/… Oder überschreiben Sie diese Bean: MappingJackso‌ n2HttpMessageConvert‌ er
hoang

@hoang wo ich dies in Java löschen kann, während ich versuche, diese illegalen Daten zu erfassen, habe ich die Frage gestellt, die hier stackoverflow.com/questions/49676720/… ist. Können Sie mir bitte helfen ?
Vipul Singh

danke wirklich nützlich, der Import, den ich verwendet habe, war: com.fasterxml.jackson.core.JsonParser.Feature;
Jesús Sánchez

1

Auf der Salesforce-Plattform wird dieser Fehler durch verursacht /. Die Lösung besteht darin, diese als zu umgehen //.


2
Für mich - auf der Salesforce-Plattform - wurde tatsächlich "\" bis "\\" benötigt. Zumindest in meinem Fall trat es aufgrund neuer Zeilenzeichen in meinem JSON auf. \nmusste geändert werden auf \\n. Dies liegt an der Tatsache, dass für JSON Steuerzeichen maskiert werden müssen. Sehen Sie diesen ausgezeichneten Kommentar hier .
Malte
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.