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).


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();

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.