json.getJSONArray()抛出一个长度为1的异常

时间:2013-04-04 18:43:34

标签: android json rest

我正在使用android将JSON字符串转换为其原始的java对象。

我从REST服务器返回List,它将List转换为JSON格式。

{"offerRideResult":[{"date":"06-APR-13 10.00.00.000000 AM","destination":"B","id":"57","PTripId":"87","req":"false","source":"A","srNo":"0","username":"Chinmay"},{"date":"06-APR-13 10.00.00.000000 AM","destination":"B","id":"1","PTripId":"88","req":"false","source":"A","srNo":"0","username":"chinmay91"}]}

在客户端是android我使用以下方法将其转换为java对象。

    try{
            JSONObject obj=new JSONObject(response);
            JSONArray arr=null;
            arr=obj.getJSONArray("offerRideResult");
            List<OfferRideResult> offerRideResult=new ArrayList<OfferRideResult>();
            for(int i=0;i<arr.length();i++)
            {
                OfferRideResult res=new OfferRideResult();
                res.setId(arr.getJSONObject(i).getInt("id"));
                res.setPTripId(arr.getJSONObject(i).getInt("PTripId"));
                res.setSrNo(arr.getJSONObject(i).getInt("srNo"));
                res.setDate(arr.getJSONObject(i).getString("date"));
                res.setSource(arr.getJSONObject(i).getString("source"));
                res.setDestination(arr.getJSONObject(i).getString("destination"));
                res.setReq(arr.getJSONObject(i).getBoolean("req"));
                res.setUsername(arr.getJSONObject(i).getString("username"));
                offerRideResult.add(res);
            }
    }catch(JSONException e)
            {
                System.out.println("Exception :- "+e);
            }

当JSON格式有两个或两个以上的记录时,它可以正常工作但是在记录时它会在输入时抛出以下异常。

{"offerRideResult":{"date":"05-APR-13 10.00.00.000000 AM","destination":"B","id":"1","PTripId":"89","req":"false","source":"A","srNo":"0","username":"chinmay91"}}

Error!!!org.codehaus.jettison.json.JSONException: JSONObject["offerRideResult"] is not a JSONArray

任何人都可以指出我的错误或我如何处理长度为一的数组?

由于

2 个答案:

答案 0 :(得分:3)

  

但是在记录中会抛出以下异常

使用JSONObject.optJSONObjectJSONObject.optJSONArray从主JSONObject中提取下一项。请尝试为:

 JSONObject obj=new JSONObject(response);
 JSONArray arr=null;
 JSONObject jsonobj=null;

 // get offerRideResult JSONArray
 arr=obj.optJSONArray("offerRideResult");

 if(arr==null){
  // means item is JSONObject instead of JSONArray
 jsonobj=obj.optJSONObject("offerRideResult");
 }else{
  // means item is JSONArray instead of JSONObject
 }

答案 1 :(得分:1)

因为只有一个结果的json不是一个数组,所以getJSONArray()

将无法正确读取

要么你可以使你的json字符串更像:

{"offerRideResult":[{"date":"05-APR-13 10.00.00.000000 AM","destination":"B","id":"1","PTripId":"89","req":"false","source":"A","srNo":"0","username":"chinmay91"}]}

或将其作为单个对象阅读,如@ρяσѕρєяK建议。