我正在使用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
任何人都可以指出我的错误或我如何处理长度为一的数组?
由于
答案 0 :(得分:3)
但是在记录中会抛出以下异常
使用JSONObject.optJSONObject或JSONObject.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建议。