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());
精细输出为{test=m\/m\/m/m/m/m/m} Hash map = {test=m\/m\/m/m/m/m/m}
String s2 = new Gson().toJson(hm.toString());
System.out.println("Json result is "+s2);
不正确输出为Json result is "{test\u003dm\\/m\\/m/m/m/m/m}"
GSON 发疯了还是我做错了? 反斜杠会发生什么,以及此u003d
出现在哪里?我知道很久以前就存在这种性质的错误,但它已经解决了。
我该如何解决这个问题?
提前谢谢。
答案 0 :(得分:74)
=
符号已编码为\u003d.
因此您需要使用disableHtmlEscaping()。
您可以使用
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String s2 = gson.toJson(hm.toString());
对于\/
转为\\/
问题,解决方案是
s2.replace("\\\\", "\\");
答案 1 :(得分:1)
由于有些人喜欢挑剔,我会添加问题的答案(尽管已经回答并选择了正确的答案)......
我同意这个问题的选择答案,请使用以下代码:
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String s2 = gson.toJson(hm.toString());
s2.replace("\\\\", "\\");
@Bajrang Hudda已经问过\ n ...我最近遇到了这个问题......我能够用以下方法解决它:
Gson gson = new Gson();
String json = (gson.toJson(data)).replaceAll("\\\\n", "\\n");