115

我有一个这样的 JSON 文件:

[
    {
        "number": "3",
        "title": "hello_world",
    }, {
        "number": "2",
        "title": "hello_world",
    }
]

在文件有根元素之前,我会使用:

Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class);

代码,但我想不出如何编码Wrapper类编码为根元素是一个数组。

我试过使用:

Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class);

和:

public class Wrapper{

    String number;
    String title;

}

但是一直没有运气。我还能如何使用这种方法阅读此内容?

PS我有这个工作使用:

JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine);
String title = ((JsonObject)entries.get(0)).get("title");

但我更愿意知道如何使用这两种方法来做到这一点(如果可能的话)。

4

4 回答 4

117

问题是由放置在数组中的(在您的情况下为每个)JSON 对象末尾的逗号引起的:

{
    "number": "...",
    "title": ".." ,  //<- see that comma?
}

如果您删除它们,您的数据将变为

[
    {
        "number": "3",
        "title": "hello_world"
    }, {
        "number": "2",
        "title": "hello_world"
    }
]

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);

应该可以正常工作。

于 2013-08-24T18:54:05.750 回答
41
Gson gson = new Gson();
Wrapper[] arr = gson.fromJson(str, Wrapper[].class);

class Wrapper{
    int number;
    String title;       
}

似乎工作正常。但是你的字符串中有一个额外的,逗号。

[
    { 
        "number" : "3",
        "title" : "hello_world"
    },
    { 
        "number" : "2",
        "title" : "hello_world"
    }
]
于 2013-08-24T19:01:10.423 回答
16
public static <T> List<T> toList(String json, Class<T> clazz) {
    if (null == json) {
        return null;
    }
    Gson gson = new Gson();
    return gson.fromJson(json, new TypeToken<T>(){}.getType());
}

示例调用:

List<Specifications> objects = GsonUtils.toList(products, Specifications.class);
于 2016-11-10T08:10:39.133 回答
1
Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);
于 2019-12-04T07:47:52.893 回答