【问题标题】:Issues with using Gson to pretty-print JSON String使用 Gson 漂亮打印 JSON 字符串的问题
【发布时间】:2012-06-13 18:14:24
【问题描述】:

有人能说明为什么会这样吗...

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

我该如何解决上述问题?

【问题讨论】:

    标签: java json gson


    【解决方案1】:

    使用此代码,创建Gson 对象:

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

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

    请注意,如果您将此类未转义的 JSON 呈现为 HTML 页面中的 <script/> tag 而不使用额外的 <![CDATA[ ... ]]> 标记,这可能会导致麻烦。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-26
      • 2015-03-22
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      相关资源
      最近更新 更多