2012-06-13 12 views
12

Czy ktoś mógłby zasugerować, dlaczego tak się dzieje ...Problemy z używaniem Gsona do ładnego drukowania JSON String

Mam trochę kodu, żeby ładnie wydrukować jakiś JSON. Aby to zrobić, korzystam z wersji Gson library.

Jednakże, chociaż zwykle działa dobrze, niektóre znaki nie wydają się być wyświetlane poprawnie. Oto prosty kawałek kodu, który demonstruje problem:

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

Wyjście powyższego kodu jest:

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

Jak mogę rozwiązać powyższe?

Odpowiedz

26

użyć tego kodu, aby utworzyć Gson obiektu:

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

Sposób disableHtmlEscaping()mówigson nie uciec znaków HTML takich jak <, >, &, = i jeden cytat, który spowodował kłopoty : '.

Należy zauważyć, że może to powodować problemy, jeśli zrenderowany JSON z nieokreśloną wersją zostanie zmieniony na <script/> tag na stronie HTML bez użycia dodatkowego znacznika <![CDATA[ ... ]]>.

Możesz zobaczyć, jak to działa, i jakie inne znaki uciekły, sprawdzając kod JsonWriter class.

Powiązane problemy