我有这样的JSON:
{"foos":[{"id":1}, {"id":2}]}
我可以很简单地用GSON把它变成List<Foo>
,就像这样:
Type t = new TypeToken<List<Foo>>(){}.getType();
JsonObject resp = new Gson().fromJson(
new JsonParser().parse(json).getAsJsonObject().get("foos",t);
但我们假设我还有另一个JSON,其中数组和类型的名称更改
{"bars":[{"id":3},{"id":9}]}
当然我可以将“foos”参数替换为“bars”,但是如果可能的话,我希望我的软件可以为我做。
有没有办法用GSON库提取数组子名称?
答案 0 :(得分:3)
我不确定我是否理解你想要的东西,但你不是指使用仿制药吗?我的意思是你可以写一个方法来返回你的相关类的列表?
的内容Type type = new TypeToken<List<MyClass>>() {}.getType();
List<MyClass> myObjects = getMyObjects(new JsonParser().parse(json).getAsJsonObject().get("foos"), type);
public static List<T> getMyObjects(String jsonString, Type type) {
Gson gson = new Gson();
List<T> myList = gson.fromJson(jsonString, type);
return myList;
}
答案 1 :(得分:1)
查看您的JSON示例,我假设列表元素的名称可以更改,但不是列表的内容。如果这是正确的,您可以像这样解析JSON响应:
Type mapType = new TypeToken<Map<String, List<Foo>>>() {}.getType();
Map<String, List<Foo>> map = gson.fromJson(jsonString, mapType);
然后您可以使用以下命令访问列表名称:
String listName = map.keySet().iterator().next();
如果列表的内容也可能发生变化,事情会变得更复杂......