字符串的 GSON 问题

2022-08-31 22:42:51
    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


答案 1

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

您可以使用

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

对于变成问题,解决方案是\/\\/

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

答案 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");

推荐