2012-06-13 9 views
12

なぜこのようなことが起こっているのか教えてください...Gsonを使用してJSON文字列をきれいに印刷する際の問題

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

答えて

26

使用このコードは、Gsonオブジェクトを作成します。

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

あなたのトラブルの原因となったような<>&=、および単一引用符をHTML文字をエスケープしないgsonを伝えdisableHtmlEscaping()方法:'

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

JsonWriter classのコードを調べると、どのように動作し、どのような文字がエスケープされるかを確認できます。

関連する問題