2012-06-13 16 views
12

Könnte jemand bitte vorschlagen, warum dies geschieht ...Probleme mit Gson mit zu Pretty-Print JSON String

Ich habe einige Code bekam ziemlich einige JSON zu drucken. Um dies zu tun, benutze ich die Gson library.

Während so normalerweise gut funktioniert, scheinen einige Zeichen nicht richtig angezeigt zu werden. Hier ist ein einfaches Stück Code, der das Problem demonstriert:

//Creating the JSON object, and getting as String: 
JsonObject json = new JsonObject(); 
JsonObject inner = new JsonObject(); 
inner.addProperty("value", "xpath('hello')"); 
json.add("root", inner); 
System.out.println(json.toString()); 

//Trying to pretify JSON String: 
Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
JsonParser parser = new JsonParser(); 
JsonElement je = parser.parse(json.toString()); 
System.out.println(gson.toJson(je)); 

Die Ausgabe des obigen Codes ist:

{"root":{"value":"xpath('hello')"}} 
{ 
    "root": { 
    "value": "xpath(\u0027hello\u0027)" 
    } 
} 

Wie konnte ich das oben beheben?

Antwort

26

Verwenden Sie diesen Code, Gson Objekt zu erstellen:

Gson gs = new GsonBuilder() 
    .setPrettyPrinting() 
    .disableHtmlEscaping() 
    .create(); 

Die disableHtmlEscaping() Methode gson sagt nicht zu HTML Escape-Zeichen wie <, >, &, =, und ein einziges Zitat, das Sie Probleme verursacht : '.

Beachten Sie, dass dies zu Problemen führen kann, wenn Sie einen solchen nicht-gescannten JSON in eine <script/> tag HTML-Seite rendern, ohne das zusätzliche Tag <![CDATA[ ... ]]> zu verwenden.

Sie können sehen, wie es funktioniert, und welche anderen Zeichen entkommen sind, indem Sie in den Code JsonWriter class schauen.