2013-12-19 35 views
-1

嗨,我有以下JSON结果:解析JSON结果的Android

{ 
    "returnCode": "1", 
    "result": [ 
     { 
      "id": "109", 
      "account_id": "159", 
      "created_on": "2013-11-29 10:46:41", 
      "title": "iphone 5", 
      "currency_code": "USD", 
      "price": "500", 
      "is_owner": "0", 
      "photoCount": 1, 
      "commentList": [ 
       { 
        "account_id": "159", 
        "created_on": "2013-11-29 10:46:41", 
        "name": "Jane Doe", 
        "comment": "Blah.. blah... blah..." 
       }, 
       { 
        "id": "134", 
        "account_id": "144", 
        "created_on": "2013-12-04 16:21:49", 
        "name": "John Doe", 
        "comment": "Blah.. blah.. blah..." 
       } 
      ], 
      "count_like": "1", 
      "count_dislike": "0", 
      "count_favorite": "0", 
      "count_comment": "1", 
      "is_order": "0" 
     } 
    ] 
} 

这是我的代码:

public ArrayList<Comment> getComments(String jData) throws JSONException{ 
    JSONObject jObj = new JSONObject(jData); 
    ArrayList<Comment> cList = new ArrayList<Comment>(); 
    JSONArray jCommentArr = jObj.getJSONArray("commentList"); 

    servResponse = (int) jObj.getInt("returnCode"); 
    if(servResponse == 1){ 
     for(int i=0; i<jCommentArr.length(); i++) 
     { 
      Comment comment = new Comment(); 
      JSONObject jComment = jCommentArr.getJSONObject(i); 

      comment.commenterId = (int) jComment.getInt("account_id"); 
      comment.commenterName = (String) jComment.getString("name"); 
      comment.commentMessage = (String) jComment.getString("comment"); 
      comment.postDate = (String) jComment.getString("created_on"); 

      cList.add(comment); 
     } 
    } 
    return cList; 
} 

我只用注释的JSON数组(指定感兴趣与“commentList”标记

但是,我的代码总是抛出一个JSON异常,说cList包含null值。 任何人都可以指出什么时候我的代码有问题吗?

THX

+0

你的代码在哪里? –

+0

继续向下滚动,它低于JSON结果。让我编辑我的问题 – Jeremy

回答

3

试试这个..

JSONObject jObj = new JSONObject(jData); 
ArrayList<Comment> cList = new ArrayList<Comment>(); 
servResponse = Integer.parseInt(jObj.getString("returnCode").trim()); 
JSONArray objarr = jObj.getJSONArray("result"); 
for(int i = 0;i< objarr.length();i++){ 
    JSONObject jCment = objarr.getJSONObject(i); 
    if(servResponse == 1){ 
     JSONArray jCommentArr = jCment.getJSONArray("commentList"); 
      for(int j=0; j<jCommentArr.length(); j++) 
      { 
       Comment comment = new Comment(); 
       JSONObject jComment = jCommentArr.getJSONObject(j); 

       comment.commenterId = Integer.parseInt(jComment.getString("account_id").trim()); 
       comment.commenterName = jComment.getString("name").trim(); 
       comment.commentMessage = jComment.getString("comment").trim(); 
       comment.postDate = jComment.getString("created_on").trim(); 

       cList.add(comment); 
      } 
    } 
} 
+0

objarr.getJSONArray()需要int index作为参数。 – Jeremy

+0

@ username55你尝试了我的编辑。 – Hariharan

1

- >JSONArray jCommentArr = jObj.getJSONArray("commentList");

变化TO->JSONArray jCommentArr = jObj.getJSONArray("result");

1

在这里你去:

JSONObject jObj = new JSONObject(jData); 
ArrayList<Comment> cList = new ArrayList<Comment>(); 
JSONArray jTemp = jObj.getJSONArray("result"); 
JSONArray jCommentArr = jTemp.getJSONObject(0).getJSONArray("commentList"); 
0

其贝科使用您直接访问commentList,它是结果数组中包含的值。你必须先访问它。

JSONArray commentList = jObj.getJSONArray("result").getJSONArray("commentList");