问题
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 is {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);
Not Fine Output is Json result is "{test\u003dm\\/m\\/m/m/m/m/m}"
Is GSON going mad or is it something that I am doing wrong? What is happening to with Back Slashes and from where does this u003d
appears? I knew that there exists a bug of this nature a long time ago but it was resolved.
How can I resolve this issue?
Thanks in advance.
回答1:
The =
sign is encoded to \u003d.
Hence you need to use disableHtmlEscaping().
You can use
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String s2 = gson.toJson(hm.toString());
For \/
turning into \\/
issue, the solution is
s2.replace("\\\\", "\\");
回答2:
Since some people like to nitpick, I'll add the answer to the question (even though it was already answered and chosen as the correct answer) ...
I agree with the chose answer to this question, use the following code:
Gson gson = new GsonBuilder().disableHtmlEscaping().create();
String s2 = gson.toJson(hm.toString());
s2.replace("\\\\", "\\");
@Bajrang Hudda has asked about \n ... I hit this issue recently ... I was able to solve it using:
Gson gson = new Gson();
String json = (gson.toJson(data)).replaceAll("\\\\n", "\\n");
来源:https://stackoverflow.com/questions/16558709/gson-issue-with-string