2012-06-13 55 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的代码,您可以看到它是如何工作的以及还有哪些字符被转义。