2012-06-13 33 views
12

Có thể ai đó vui lòng đề xuất lý do tại sao điều này xảy ra ...Các vấn đề với việc sử dụng Gson để in chuỗi JSON khá

Tôi có một số mã để in một số JSON đẹp. Để làm điều này, tôi đang sử dụng trong số Gson library.

Tuy nhiên, do đó thường hoạt động tốt, một số ký tự dường như không được hiển thị chính xác. Dưới đây là một đoạn mã đơn giản đó chứng tỏ vấn đề:

//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)); 

Sản lượng của các mã trên là:

{"root":{"value":"xpath('hello')"}} 
{ 
    "root": { 
    "value": "xpath(\u0027hello\u0027)" 
    } 
} 

Làm thế nào tôi có thể sửa chữa ở trên?

Trả lời

26

Sử dụng mã này, để tạo ra Gson đối tượng:

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

Các disableHtmlEscaping() phương pháp nóigson không để thoát khỏi nhân vật HTML như <, >, &, =, và một giá duy nhất khiến bạn gặp rắc rối : '.

Lưu ý rằng điều này có thể gây ra sự cố, nếu bạn hiển thị JSON chưa thoát này thành <script/> tag trong trang HTML mà không cần sử dụng thẻ <![CDATA[ ... ]]> bổ sung.

Bạn có thể xem cách hoạt động và các ký tự khác bị thoát, bằng cách xem mã JsonWriter class.

Các vấn đề liên quan