Können Sie vermeiden, dass Gson "<" und ">" in Unicode-Escape-Sequenzen konvertiert?

127

Ich habe festgestellt, dass Gson die Zeichenfolge "<" in eine Unicode-Escape-Sequenz in der JSON-Ausgabe konvertiert. Können Sie dies irgendwie vermeiden oder müssen Zeichen wie "<" und ">" in JSON immer maskiert werden?

Betrachten Sie dieses Beispiel, das gedruckt wird {"s":"\u003c"}. Ich würde einfach wollen {"s":"<"}.

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

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

Kontext: Das von mir erstellte Stück JSON hat nichts mit HTML-Seiten oder sogar JavaScript zu tun. Es wird nur verwendet, um bestimmte strukturierte Informationen an eine andere Software weiterzugeben (eingebettet in ein Gerät, geschrieben in C).

Jonik
quelle
2
Macht GSON das standardmäßig? Whoa. Das ist eine ziemlich seltsame Standardeinstellung, obwohl sie aus Sicht der JSON-Spezifikation völlig legal ist.
StaxMan
3
Ja, es war auch für mich überraschend. Glücklicherweise ist das Mittel einfach, sobald Sie wissen, wo Sie suchen müssen. :) Ansonsten finde ich Gson nach einem Tag Erfahrung damit eine wirklich saubere, schöne Bibliothek mit einer großartigen Bedienungsanleitung !
Jonik
6
Dies passiert auch mit dem Zeichen "=", das sich in "\ u003d" verwandelt.
Russell Silva

Antworten:

253

Sie müssen die HTML-Escape-Funktion deaktivieren .

Gson gson = new GsonBuilder().disableHtmlEscaping().create();
BalusC
quelle
11
Ich frage mich, warum es standardmäßig aktiviert ist. JSON hat nichts mit HTML zu tun. Nur die Spezifikation gibt an "und `\` muss maskiert werden.
Mark Jeronimus
Leute, das hat bei mir nicht funktioniert. Ich verwende '' com.squareup.retrofit2: Nachrüstung: 2.3.0 '' && '' com.squareup.retrofit2: converter-gson: 2.3.0 ''. Bitte hilf mir.
Mr Code