使用Gson来打印JSON字符串的问题

有人可以建议为什么会发生这种情况……

我有一些代码可以打印一些JSON。 为此,我正在使用Gson库 。

但是,虽然通常效果很好,但某些字符似乎没有正确显示。 这是一段简单的代码来演示这个问题:

//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)" } } 

我怎么能解决上述问题?

使用此代码创建Gson对象:

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

disableHtmlEscaping()方法告诉 gson不要转义HTML字符,例如<>&= ,以及导致你麻烦的单引号: '

请注意,如果您将此类未转义的JSON呈现到HTML页面中的 tag而不使用其他标记,则可能会造成问题。

通过查看JsonWriter类的代码,您可以看到它是如何工作的,以及其他字符是否被转义。