2015-11-15 191 views
0

我正在使用OkHttp對我的MongoLab數據庫進行REST調用,並且能夠打印出JSON數據。但是,我無法將該JSON數據映射到Android上的GSON類。使用GSON解析MongoLab JSON

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

教室應該是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());