【问题标题】:Escape String backslash using GSON使用 GSON 转义字符串反斜杠
【发布时间】:2019-03-14 19:44:13
【问题描述】:

我正在尝试将我的 hashmap 转换为 JSON 漂亮的打印输出。

我尝试了 GSON,并认为它在将字符串作为地图中的输入处理时存在一些问题,有没有其他方法可以做到这一点?

Map<String, String> map = new LinkedHashMap();
Gson gson = new GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting().create();
                    map.put("Intro", Map_to_String);
                    map.put("Output", String_Val);
                    System.out.println(gson.toJson(map));

输出:

{
  "Intro": {\"No\":0,\"Cast\":2},
  "Output": "123"
}

所需输出:

{
  "Intro": {"No":0,"Cast":2},
  "Output": "123"
}

【问题讨论】:

  • {"Intro": "{"No":0,"Cast":2}","Output": "123"} - 无效JSON。您确定不想像我的回答那样{"Intro": {"No": 0,"Cast": 2},"Output": "123"} 吗?
  • 是的,对不起,我会更新相同的。

标签: java json parsing gson


【解决方案1】:

您需要将 Map_to_String 反序列化回对象 - 在这种情况下为 Map,然后再次序列化。

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.LinkedHashMap;
import java.util.Map;

public class GsonApp {

    public static void main(String[] args) {
        Map<String, Object> map = new LinkedHashMap<>();
        Gson gson = new GsonBuilder()
                .enableComplexMapKeySerialization()
                .setPrettyPrinting()
                .create();

        String jsonString = "{\"No\":0,\"Cast\":2}";

        Type mapType = new TypeToken<Map<String, String>>() {}.getType();
        map.put("Intro", gson.fromJson(jsonString, mapType));
        map.put("Output", "123");
        System.out.println(gson.toJson(map));
    }
}

打印:

{
  "Intro": {
    "No": "0",
    "Cast": "2"
  },
  "Output": "123"
}

【讨论】:

  • 我的实际数据在“No”和“Cast”键中也有字符串值(非数字),你能告诉我在这种情况下需要做的更改吗?如果我将 TypeToken 更改为 那么我得到的输出是将整数转换为十进制。我希望输出本身是字符串格式(非小数)。
  • @InheritedGeek,在这种情况下你应该使用Map&lt;String, String&gt; 类型。它将自动使用String 作为值。
猜你喜欢
  • 1970-01-01
  • 2021-12-16
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-26
  • 1970-01-01
相关资源
最近更新 更多