使用GSON将Map<Integer, Object>转换为JSON?

6

嗨,大家好,

我想知道是否可以使用GSON将Map转换为JSON,反之亦然?我传入的对象已经使用GSON从JSON转换为对象。

我正在使用的对象如下所示:

public class Locations{
    private List<Location> location;
    <-- Getter / Setter --> 

    public class Location{
        <-- Fields and Getters/Setters -->
    }
}

你是否参考了这个网址:http://kodejava.org/how-do-i-convert-map-into-json/? - Amsheer
2个回答

13
假设您正在使用 java.util.Map
Map<Integer, Object> map = new HashMap<>();

map.put(1, "object");

// Map to JSON
Gson gson = new Gson(); // com.google.gson.Gson
String jsonFromMap = gson.toJson(map);
System.out.println(jsonFromMap); // {"1": "object"}

// JSON to Map
Type type = new TypeToken<Map<String, String>>(){}.getType();
Map<String, String> map = gson.fromJson(json, type);
for (String key : map.keySet()) {
    System.out.println("map.get = " + map.get(key));
}

源代码


我会尝试实现这个,如果成功或失败,我会再和你联系。 - Jordi Sipkens
工作正常,抱歉耽搁了。差点忘记了! - Jordi Sipkens
当您将 JSON 转换为 Map 时,如何保持键仍为整数? - Heaven
@Heaven 将 TypeToken<Map<String, String>> 更改为 TypeToken<Map<Integer, String>>,并将 map 的类型从 Map<String, String> 更改为 Map<Integer, String>。然后,for 循环中的 key 类型更改为 Integer key,您可以像上面的示例一样使用 map.get(key)。希望这有所帮助,如果有问题请告诉我。 - AlexWalterbos

1
听起来你只需要注册类型,这样GSON才知道如何处理它:
Gson gson = new Gson();
Type integerObjectMapType = new TypeToken<Map<Integer, Object>>(){}.getType();
Map<Integer, Object> map = new HashMap<>();
map.put(1, new Object());

String json = gson.toJson(map, integerObjectMapType);
System.out.println(json);

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