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()メソッドは、問題の原因となった、、、および単一引用符などの HTML 文字をエスケープしないように指示 します: 。gson<>&='

このようなエスケープされていない JSON を、追加のタグ<script/> tagを使用せずに HTML ページにレンダリングすると、問題が発生する可能性があることに注意してください。<![CDATA[ ... ]]>

JsonWriterclassのコードを調べると、それがどのように機能するか、および他のどの文字がエスケープされるかを確認できます。

于 2012-06-13T19:01:13.847 に答える