【问题标题】:Parsing MongoLab JSON with GSON使用 GSON 解析 MongoLab JSON
【发布时间】:2016-02-17 00:22:18
【问题描述】:

我正在使用 OkHttp 对我的 MongoLab 数据库进行 REST 调用,并且能够很好地打印出 JSON 数据。但是,我在将 JSON 数据映射到 Android 上的 GSON 类时遇到了问题。

JSON 数据:

[
    {
        "_id": {
            "$oid": "5649112ae4b02e2b2edaba79"
        },
        "classroom": {
            "student1": {
                "name": "mehdi",
                "age": 21,
                "course": "Web"
            },
            "student2": {
                "name": "mkyong",
                "age": 29,
                "course": "Java"
            }
        }
    }
]

我的班级:

static class School {
    Map<String, Student> classroom;
}

static class Student {
    private String name;
    private int age;
    private String course;
}

当我运行它时,我得到了这个:

FATAL EXCEPTION: OkHttp Dispatcher
com.google.gson.JsonSyntaxException: java.io.IOException: closed

我已经测试了其他非 MongoLab JSON 数据并且它有效,所以我不确定我哪里出错了。

【问题讨论】:

    标签: android gson okhttp


    【解决方案1】:

    Classroom 应该是 JSONArray 而不是 JSONObject。

    [
            {
                "_id": {
                    "$oid": "5649112ae4b02e2b2edaba79"
                },
                "classroom": [
                    {
                        "name": "mehdi",
                        "age": 21,
                        "course": "Web"
                    },
                    {
                        "name": "mkyong",
                        "age": 29,
                        "course": "Java"
                    }
                ]
            }
    ]
    

    然后你可以这样做来获得一个数组:

    List<Student> result = new ArrayList<>();
    JSONObject data=new JSONObject(json);
    JSONArray dataArray=data.getJSONArray("classroom");
    for(int n = 0; n < dataArray.length(); n++)
    {
       JSONObject object = dataArray.getJSONObject(n);
       result.add(gson.fromJson(object.toString(), Student.class));
    }
    

    或者更简单的方法

    JSONObject data=new JSONObject(json);
    List<Student> result = gson.fromJson(data.getString("classroom"), new TypeToken<List<Student>>(){}.getType());
    

    【讨论】:

      猜你喜欢
      • 2011-02-12
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多