GSON字符串问题

49
    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结果为"{test\u003dm\\/m\\/m/m/m/m/m}"

GSON是疯了还是我做错了什么?这些反斜杠是怎么回事?u003d又是从哪里来的?我知道很久以前存在这样的一个bug,但是已经解决了。如何解决这个问题?谢谢。


其编码为:= 转换为 \u003dm\ 转换为 \\\\ - codeMan
我该如何解决后面的问题?有什么建议吗? - Fahad Ishaque
2个回答

129
=符号被编码为\u003d。因此,您需要使用disableHtmlEscaping()方法。

您可以使用

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

对于将 \/ 转换为 \\/ 的问题,解决方案是

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

那么 \n 呢?因为有时候字符串中也会添加 \n。 - Bajrang Hudda
1
@Bajarang 使用方法如下:String base64EncodedData = Base64.encodeToString(data, Base64.NO_WRAP); - Pinkesh Darji
谢谢。这很有帮助。 - donmj

3

因为有些人喜欢挑刺,所以我会补充一下问题的答案(尽管已经有人回答并选择了正确答案)...

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

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

@Bajrang Hudda询问了关于...我最近遇到了这个问题...我能够使用以下方法解决:

Gson gson = new Gson();
String json = (gson.toJson(data)).replaceAll("\\\\n", "\\n");

但就我所见,这并不是对原问题的答案。 - anothernode
4
@anothernode 我不能在声望低于50点的情况下回复那个问题下面的那个人...所以我在这里添加了另一个回复,告我吧。 - Nicholas P.
1
看,我只是给你一个友好的提示。没必要生气。而且把别人的答案复制粘贴到你的非答案中并不能让情况变得更好。 - anothernode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接