JsonParseException:引用符で囲まれていない無効な文字((CTRL-CHAR、コード10)


93

org.apache.httpcomponentsJSON形式のデータをAPIにポストするRest API を使用するために使用しようとしています。

私はこの例外を受け取ります:

原因:com.fasterxml.jackson.core.JsonParseException:引用符で囲まれていない不正な文字((CTRL-CHAR、コード10)):文字列に含めるには、バックスラッシュを使用してエスケープする必要があります。

その理由はctrl-char、JSON文字列に含まれているためです。

これまたは他の解決策を置き換える方法はありますか?


1
JSONを自分で作成していますか?基本的には、データが壊れているように聞こえます...可能な場合は修正するか、それを作成した人に文句を言うかのどちらかです。
Jon Skeet、2015

1
このStackOverflowの回答で説明したように、jsonlint.comを介してJSONは正しく検証されますか?
エリックマコーミック2015

Intellijのアイデアは、.jsonファイルを開くとすぐにそれを検証します。それを試してみてください!
Gaurav

回答:


83

これは、JSON文字列リテラルに改行(または他の制御文字)がある場合に発生する可能性があります。

{"foo": "bar
baz"}

あなたがデータを作成しているのであれば"\\n"、文字列リテラルを作成するときに実際の改行をエスケープされたものに置き換えてください。

{"foo": "bar\nbaz"}

55

使用する

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_CHARS2.10以降、古いオプションは廃止されました。

github threadも参照してください。


これを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を使用しています。およびSpring4.3.2
SudeepShakya

:あなたはこのしようとしないのはなぜstackoverflow.com/questions/5349362/... MappingJackso n2HttpMessageConvertのER:またはそのBeanをオーバーライド
ホアン

私は、この不正なデータをキャプチャしようとしているとして、Javaでこれをdelareする@hoangは、私がここにある質問尋ねてきたstackoverflow.com/questions/49676720/...~~Vを、あなたは私が助けを喜ばせることができます。
Vipul Singh

本当に役に立ちました。私が使用したインポートは次のとおりです。 com.fasterxml.jackson.core.JsonParser.Feature;
JesúsSánchez

1

Salesforceプラットフォームでは、このエラーはによって引き起こされます。/解決策は、これらをとしてエスケープすること//です。


2
私にとって-Salesforceプラットフォームでは-実際に必要なのは "\"から "\\"まででした。少なくとも私の場合は、JSONの改行文字が原因で発生しました。\nに変更する必要がありました\\n。これは、JSONでは制御文字をエスケープする必要があるためです。こちらの優れたコメントをご覧ください
モルト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.