0

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

我从 REST 服务器返回列表,并将列表转换为 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

谁能指出我的错误或者我该如何处理长度为一的数组?

谢谢

4

2 回答 2

3

但有记录它会引发以下异常

使用JSONObject.optJSONObjectJSONObject.optJSONArray从 main 中提取下一项。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
 }
于 2013-04-04T18:57:48.427 回答
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 提议的那样将其作为单个对象读入。

于 2013-04-04T19:07:56.550 回答