1

I have JSON like this:

{"foos":[{"id":1}, {"id":2}]}

I can turn it into List<Foo> pretty simply with GSON, like this:

Type t = new TypeToken<List<Foo>>(){}.getType();
JsonObject resp = new Gson().fromJson(
    new JsonParser().parse(json).getAsJsonObject().get("foos",t);

But let's assume that I also have another JSON, where the name of the array and type changes

{"bars":[{"id":3},{"id":9}]}

Of course I could just swap the "foos" parameter for "bars", but if it's possible, I'd like my software to do it for me.

Is there a way to extract the name of the array child with the GSON library?

4

2 回答 2

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;
}
于 2013-04-30T19:00:33.303 回答
1

查看您的 JSON 示例,我假设 list 元素的名称可以更改,但 list 的内容不能更改。如果这是正确的,您可以像这样解析您的 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();

如果列表的内容也可以改变,事情会变得有点复杂......

于 2013-05-07T10:37:31.113 回答