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