Pouvez-vous éviter que Gson ne convertisse «<» et «>» en séquences d'échappement Unicode?

127

J'ai remarqué que Gson convertit la chaîne "<" en une séquence d'échappement unicode dans la sortie JSON. Pouvez-vous éviter cela d'une manière ou d'une autre, ou est-ce que des caractères comme "<" et ">" doivent toujours être échappés dans JSON?

Considérez cet exemple qui imprime {"s":"\u003c"}; Je voudrais simplement {"s":"<"}.

public static void main(String[] args) {
    Gson gson = new GsonBuilder().create();
    System.out.println(gson.toJson(new Foo()));  
}

static class Foo {
    String s = "<";
}

Contexte: le morceau de JSON que je crée n'a rien à voir avec les pages HTML ou même JavaScript; il est simplement utilisé pour transmettre certaines informations structurées à un autre logiciel (intégré dans un appareil, écrit en C).

Jonik
la source
2
Est-ce que GSON le fait par défaut? Whoa. C'est un paramètre par défaut plutôt étrange, bien que ce soit parfaitement légal du point de vue des spécifications JSON.
StaxMan
3
Ouais, c'était surprenant pour moi aussi. Heureusement, le remède est facile une fois que vous savez où chercher. :) Sinon, après une journée d'expérience, je trouve que Gson est une bibliothèque vraiment propre et agréable, avec un excellent guide d'utilisation aussi!
Jonik
6
Cela arrive également au caractère "=", qui se transforme en "\ u003d".
Russell Silva

Réponses:

253

Vous devez désactiver l'échappement HTML .

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
BalusC
la source
11
Je me demande pourquoi il est activé par défaut. JSON n'a rien à voir avec le HTML. La spécification indique uniquement "et `\` doit être échappé.
Mark Jeronimus
Les gars, cela n'a pas fonctionné pour moi. J'utilise '' com.squareup.retrofit2: retrofit: 2.3.0 '' && '' com.squareup.retrofit2: converter-gson: 2.3.0 ''. Aidez-moi, s'il vous plaît.
Mr Code