2012-06-13 93 views
12

有人可以請建議爲什麼會發生這種情況...使用Gson漂亮打印JSON字符串的問題

我有一些代碼來打印一些JSON。要做到這一點,我正在使用Gson library

但是,雖然通常效果不錯,但某些字符看起來並沒有正確顯示。下面是一段簡單的代碼演示了此問題:

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

上述代碼的輸出是:

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

我怎麼能解決上面?

回答

26

使用此代碼,創建Gson對象:

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

disableHtmlEscaping()方法告訴gson不是逃避HTML字符,如<>&=,和單一造成你麻煩報價:'

請注意,如果您在HTML頁面中將此類未轉義的JSON呈現爲<script/> tag而未使用其他<![CDATA[ ... ]]>標記,則可能會造成麻煩。

通過查看JsonWriter class的代碼,您可以看到它是如何工作的以及還有哪些字符被轉義。