在Android中尝试解析Json,获得arraylist异常

时间:2012-10-08 15:22:17

标签: android json parsing

我有一个像这样的json:

[{"campaignName":"2012 Q1","id":1,"source":"Added by subject","status":"Draft","subject":"Test Subject1"},{"campaignName":"2012 Q2","id":2,"source":"Added by reviewer","status":"Created","subject":"Test Subject2"},{"campaignName":"2012 Q2","id":3,"source":"Added by reviewer","status":"Created","subject":"Test Subject62"}]

我有课程:

public class Json_ToDoData {
private ArrayList<ToDo> mList;

public Json_ToDoData() {

}

public ArrayList<ToDo> getmList() {
    return mList;
}

public void setmList(ArrayList<ToDo> mList) {
    this.mList = mList;
}

}

和:`public class ToDo {     public ToDo(){     }

@SerializedName("campaignName")
private String campaignName;

@SerializedName("id")
private String id;

@SerializedName("source")
private String source;

@SerializedName("status")
private String status;

@SerializedName("subject")
private String subject; ... gettes and settes ...}`

我总是得到一个例外:

  

10-08 15:17:46.600:W / System.err(2557):java.lang.ClassCastException:java.util.ArrayList   而且我不明白为什么。这是我要解析的行:

            Json_ToDoData rr = new JSONDeserializer<Json_ToDoData>().deserialize(sb.toString(), Json_ToDoData.class);

请帮助我,thx

3 个答案:

答案 0 :(得分:1)

我认为问题是用户json字符串的格式不正确。 尝试使用以下格式格式化json字符串:

{ 
    jsonObjectName: 
    [ 
          { 
             "campaignName":"2012 Q1", 
             "id":1,
             "source":"Added by subject",
             "status":"Draft",
             "subject":"Test Subject1"
          } 
    ] 
}

答案 1 :(得分:0)

你的json字符串中的

;
“id”的值定义为Integer,并且您尝试将其解析为字符串,
我认为这是例外的根本原因......

在Todo类中,它被定义为;

@SerializedName("id")
private String id;

但在json字符串中,它被定义为;

"id":1

要解决此问题,您可以将班级中的字段更新为

@SerializedName("id")
private Integer id;

或在你的json字符串中

"id":"1"

希望这会有所帮助。

答案 2 :(得分:0)

首先,我想说谢谢你在这个问题上的合作,解决方案是关于我的解析器,我的意思是我已经更改了以下代码:

        JSONTokener jsonTokener = new JSONTokener(sb.toString());
        JSONArray rootArray = (JSONArray) jsonTokener.nextValue();
        rootArray.toString();