47
    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出现?我早就知道存在这种性质的错误,但它已经解决了。我该如何解决这个问题?提前致谢。

4

2 回答 2

119

=符号被编码为\u003d.因此您需要使用disableHtmlEscaping()

您可以使用

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

为了\/变成\\/问题,解决方案是

s2.replace("\\\\", "\\");
于 2013-05-15T07:02:41.353 回答
2

由于有些人喜欢吹毛求疵,我会在问题中添加答案(即使它已经被回答并被选为正确答案)......

我同意这个问题的选择答案,使用以下代码:

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");
于 2018-05-16T15:03:07.953 回答