一尘不染

使用Gson漂亮地打印JSON字符串的问题

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

我该如何解决以上问题?


阅读 312

收藏
2020-07-27

共1个答案

一尘不染

使用此代码创建Gson对象:

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

disableHtmlEscaping()方法 告诉
gson不要逃避HTML字符,如<>&=,并造成你的麻烦一个单引号:'

请注意,如果您<script/> tag在不使用其他<![CDATA[ ... ]]>标签的情况下将此类未转义的JSON呈现到HTML页面中,则可能会造成麻烦。

通过查看JsonWriterclass的代码,您可以了解它的工作原理以及其他字符是否转义。

2020-07-27