使用GSON获取元素名称

时间:2013-04-30 18:43:38

标签: java json gson

我有这样的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库提取数组子名称?

2 个答案:

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

如果列表的内容也可能发生变化,事情会变得更复杂......