【问题标题】:How to parse JsonObject to List<MyClass> using gson如何使用 gson 将 JsonObject 解析为 List<MyClass>
【发布时间】:2015-06-11 18:53:39
【问题描述】:

我需要一个对象列表,但在获取它时遇到了问题。我很新,所以有人可以帮助我吗?

我正在使用 volley 来获取 jsonObject,然后我需要对其进行转换(我看到最好的 wa 是使用 gson)。您可以在下面看到我的 json 示例的外观。

{
network: {
    company: "JCDecaux",
    href: "/v2/networks/dublinbikes",
    id: "dublinbikes",
    location: {
        city: "Dublin",
        country: "IE",
        latitude: 53.3498053,
        longitude: -6.2603097
    },
    name: "dublinbikes",
    stations: [
        {
            empty_slots: 37,
            extra: {
                address: "Fitzwilliam Square East",
                bonus: false,
                connected: "1",
                last_update: "1434047944",
                open: true,
                slots: 40,
                ticket: true,
                uid: 89
            },
            free_bikes: 3,
            id: "153ff4dfb7bd8912ef91c10849129c2e",
            latitude: 53.335211,
            longitude: -6.2509,
            name: "Fitzwilliam Square East",
            timestamp: "2015-06-11T18:41:31.11Z"
        },
        {
            empty_slots: 0,
            extra: {
                address: "Portobello Harbour",
                bonus: false,
                connected: "1",
                last_update: "1434047764",
                open: true,
                slots: 30,
                ticket: false,
                uid: 34
            },
            free_bikes: 30,
            id: "3c0cfd547a142bb651280991a412bcbe",
            latitude: 53.330362,
            longitude: -6.265163,
            name: "Portobello Harbour",
            timestamp: "2015-06-11T18:41:31.15Z"
        },

...等

站类

public class Station {
    public Station(){}

    public String StationName;
    public String Distance;
    public String Slots;
    public String Bikes;
    public String LastUpdate;

    //Getters and Setters ...
}

您可以在下面看到我到目前为止所做的事情..

 //stations
 JSONObject jsonNetwork = new JSONObject(response.getString("network"));

   Type listType = new TypeToken<ArrayList<Station>>() {
                }.getType();
   List<Station> yourClassList = new Gson().fromJson(jsonNetwork, listType);

但我不知道如何解析所有这些并避免我不需要的数据以及函数 Gson().fromJson 需要和 JsonArray 而我拥有的是 JsonObject

感谢您的宝贵时间!

【问题讨论】:

  • 我认为我使用 gson 完全错了,我不知道如何解析它。
  • 您需要为对象创建类,以便将主对象本身解析为一个类。
  • 嗯,没有办法避免我不需要的数据? @EpicPandaForce

标签: android gson android-volley


【解决方案1】:

如果您要寻找的只是车站,那么我认为您应该执行以下操作:

//stations
    JSONObject jsonNetwork = new JSONObject(response.getString("network"));
    JSONArray stationsArray = jsonNetwork.getJSONArray("stations");

现在,您应该将这个stationsArray 变量传递给fromJson 方法。此外,您的 Station 类的变量名称应等于您要从 json 中提取的键名称。以下链接中有一个很好的例子:

http://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/

【讨论】:

    【解决方案2】:

    使用下面的代码

    Gson gson = new Gson();
    YourClass obj = gson.fromJson(jsonObject.toString(), YourClass.class);
    

    【讨论】:

    • 我需要的是我的对象列表(Myclass)以及如何获取 jsonString 以及我拥有的是 JsonObject 并且不起作用 myJsonObject.toString() @spgodara
    • YourClass[] obj = gson.fromJson(jsonObject.toString(), YourClass[].class);
    • 您可以使用response.getString("network"),即String。还为所需的每个级别创建实现Serializable 的类。
    • response.getString("network") 工作正常,但是当我执行 Station[] obj = gson.fromJson(temp, Station[].class); 失败时,我认为问题是我的 Station 类看起来如何......所以我的 Station 类应该是什么样子。我在这里添加了我的课程(jsfiddle.net/dz254cy8/1),以向您展示外观以及 jsonString @spgodara
    • Station类中实现Serializable接口
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    相关资源
    最近更新 更多