【问题标题】:How to serialize Map<String, List<Integer>> using gson?如何使用 gson 序列化 Map<String, List<Integer>>?
【发布时间】:2019-10-03 07:21:43
【问题描述】:

我遇到了 gson 问题。 当我调用 toJson() 方法时,无论我做什么都会抛出 StackOverflowError。

这是我正在尝试的 sn-p。

private Map<String, ArrayList<Integer>> mMap = new HashMap<String, ArrayList<Integer>>() {{
    put("KEY_A", new ArrayList<Integer>( Arrays.asList(1,2,3)));
    put("KEY_B", new ArrayList<Integer>( Arrays.asList(1,3,5)));
    put("KEY_C", new ArrayList<Integer>( Arrays.asList(1,2,3)));
}};
Gson gson = new Gson();
public String getString() {
    return gson.toJson(mMap);
}

我尝试在调用 toJson() 方法时输入类型参数,例如:

Type type = new TypeToken<Map<String, Object>>(){}.getType();
public String getString() {
    return gson.toJson(mMap, type);
}

并尝试了不同的类型配置,例如:

Type type = new TypeToken<Map<String, ArrayList<Integer>>>(){}.getType();
// Object -> ArrayList<Integer>

但根本没有用。

任何评论将不胜感激。 谢谢!

【问题讨论】:

    标签: json collections hashmap gson


    【解决方案1】:

    您可以使用GsonBuilder 对象启用复杂的映射键序列化。这是一个工作示例:

    Map<String, ArrayList<Integer>> mMap = new HashMap<String, ArrayList<Integer>>() {
        {
            put("KEY_A", new ArrayList<Integer>(Arrays.asList(1, 2, 3)));
            put("KEY_B", new ArrayList<Integer>(Arrays.asList(1, 3, 5)));
            put("KEY_C", new ArrayList<Integer>(Arrays.asList(1, 2, 3)));
        }
    };
    GsonBuilder builder = new GsonBuilder();
    Gson gson = builder.enableComplexMapKeySerialization().setPrettyPrinting().create();
    Type type = new TypeToken<HashMap<String, ArrayList<Integer>>>(){}.getType();
    System.out.println(gson.toJson(mMap, type));
    

    它打印输出:

    {
      "KEY_A": [
        1,
        2,
        3
      ],
      "KEY_C": [
        1,
        2,
        3
      ],
      "KEY_B": [
        1,
        3,
        5
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 2023-03-26
      • 1970-01-01
      • 2022-09-30
      • 2017-03-21
      • 2012-09-16
      相关资源
      最近更新 更多