使用GSON解析MongoLab JSON

时间:2015-11-15 23:19:22

标签: android gson okhttp

我正在使用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数据并且它有效,所以我不确定我哪里出错了。

1 个答案:

答案 0 :(得分:0)

课堂应该是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());