web-dev-qa-db-ja.com

JsonparseException引用符で囲まれていない不正な文字((CTRL-CHAR、コード10)

org.Apache.httpcomponentsを使用してREST APIを使用しようとしています。これにより、JSON形式のデータがAPIにポストされます。

私は例外を取得しながら

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

その理由は、ctrl-charがjson文字列に含まれているからです。

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

ありがとう!

67
jian zhong

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

{"foo": "bar
baz"}

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

{"foo": "bar\nbaz"}
57
pyrospade

を使用して

mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);

javadoc を参照してください:

 /**
   * Feature that determines whether parser will allow
   * JSON Strings to contain unquoted 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.
   */
37
hoang

Vimなどのテキストエディターを使用して、この問題の原因となる(非表示の)特殊文字またはエスケープ文字があるかどうかを確認することをお勧めします。

または、Windowsを使用している場合は、さらに簡単です... Windowsのメモ帳にコードをコピーして貼り付けるだけで、目に見えない不要なエスケープ文字や改行などが表示される可能性が高くなります。

Salesforceプラットフォームでは、このエラーは/が原因で発生します。解決策は、これらを//としてエスケープすることです。

1