web-dev-qa-db-fra.com

JsonparseException Caractère non mis entre guillemets illégal ((CTRL-CHAR, code 10)

J'essaie d'utiliser org.Apache.httpcomponents pour consommer une api de repos, qui publiera des données au format JSON sur api.

alors que je fais exception

Causé par: com.fasterxml.jackson.core.JsonParseException: Caractère non mis entre guillemets illégal ((CTRL-CHAR, code 10)): doit être échappé à l'aide d'une barre oblique inversée pour être inclus dans chaîne.

La raison en est que ctrl-char est inclus dans la chaîne json.

Existe-t-il un moyen de remplacer cette solution?

merci!

70
jian zhong

Cela peut arriver si vous avez une nouvelle ligne (ou un autre caractère de contrôle) dans un littéral de chaîne JSON.

{"foo": "bar
baz"}

Si vous êtes celui qui produit les données, remplacez les sauts de ligne réels par des caractères d'échappement "\\n" lors de la création de vos littéraux de chaîne.

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

En utilisant

mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);

Voir 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.
   */
38
hoang

Je vous recommande d'utiliser un éditeur de texte tel que Vim pour rechercher les éventuels caractères spéciaux (invisibles) ou d'échappement à l'origine de ce problème.

Ou si vous utilisez Windows, c'est même simple ... il suffit de copier-coller le code dans le bloc-notes Windows, et il montrera très probablement tous les caractères d'échappement invisibles ou les sauts de ligne, etc., corrigez-les et vous avez terminé!

Sur la plate-forme Salesforce, cette erreur est provoquée par /, la solution consiste à les échapper en tant que //.

1
Daniel Sokolowski