2013-05-15 35 views
19
String s = "m\\"+"/m\\/m/m/m/m/m"; 

    LinkedHashMap<String, String> hm = new LinkedHashMap<>(); 

    hm.put("test", s); 

    System.out.println(hm+" Hash map = "+hm.toString()); 

Fine Output là {test=m\/m\/m/m/m/m/m} Hash map = {test=m\/m\/m/m/m/m/m}GSON vấn đề với String

String s2 = new Gson().toJson(hm.toString()); 

    System.out.println("Json result is "+s2); 

Không Fine Output là Json result is "{test\u003dm\\/m\\/m/m/m/m/m}"

GSON sẽ điên hoặc là nó cái gì mà tôi đang làm sai? Điều gì đang xảy ra với Dấu gạch chéo ngược và từ đâu xuất hiện u003d này? Tôi biết rằng tồn tại một lỗi của bản chất này từ lâu rồi nhưng nó đã được giải quyết. Tôi làm cách nào để giải quyết vấn đề này? Cảm ơn trước.

+0

mã hóa của nó một lần nữa: '=' với '\ u003dm' và' \ cho '\\\ ' – codeMan

+0

Làm thế nào tôi có thể giải quyết vấn đề sau này. Bất kỳ đề xuất? –

Trả lời

43

Dấu hiệu = được mã hóa thành \u003d. Do đó bạn cần sử dụng disableHtmlEscaping().

Bạn có thể sử dụng

Gson gson = new GsonBuilder().disableHtmlEscaping().create(); 
String s2 = gson.toJson(hm.toString()); 

Đối \/ biến thành \\/ vấn đề, giải pháp là

s2.replace("\\\\", "\\"); 
+0

điều gì về \ n ?? Bởi vì \ n cũng được thêm vào đôi khi trong chuỗi. –