17

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

我有一些代码可以漂亮地打印一些 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)"
  }
}

我该如何解决上述问题?

4

1 回答 1

32

使用此代码创建Gson对象:

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

disableHtmlEscaping()方法告诉 gson不要转义 HTML 字符,例如<, >, &, =, 和给你带来麻烦的单引号:'.

请注意,如果您在不使用附加标签的情况下将此类未转义的 JSON 呈现到<script/> tagHTML 页面中,这可能会导致麻烦。<![CDATA[ ... ]]>

JsonWriter通过查看class的代码,您可以了解它是如何工作的,以及转义了哪些其他字符。

于 2012-06-13T19:01:13.847 回答