我正在使用谷歌地方api进行附近的酒店搜索,在JSON回复中,如果某些酒店有"评级"密钥可用,对于一些酒店"评级"密钥不可用。因此,json解析器无法找到某些json对象的评级键 - 它通过给出错误来停止解析 - >
12-19 22:00:06.726 3811-3811/com.example.gplacesapp W/System.err: org.json.JSONException: No value for rating
我想在显示列表中包含评分,但我不能这样做.. 如何解决这个问题,有评级的酒店可以在列表中进行相应的解析和显示,那些没有评级的酒店我可以写在那里
这是JSON解析代码 - >
private ArrayList<Hotels> parseJson(String s) {
if(hotellist!=null)
hotellist.clear();
if(s!=null){
try {
JSONObject jobj=new JSONObject(s);
Log.i("MainActivity","Json Object is ->" +jobj.toString());
Toast.makeText(getApplicationContext(),jobj.toString(),Toast.LENGTH_SHORT).show();
JSONArray jarr=jobj.getJSONArray("results");
Log.i("MainActivity","No of elements : "+ jarr.length());
Toast.makeText(getApplicationContext(),"No of elements : "+ jarr.length(),Toast.LENGTH_SHORT).show();
for (int i = 0; i < jarr.length(); i++) {
JSONObject res = jarr.getJSONObject(i);
Hotels wthr = new Hotels();
String nam = res.getString("name");
wthr.setName(nam);
String rat = res.getString("rating");
wthr.setRating(rat);
String addr = res.getString("vicinity");
wthr.setVicinity(addr);
Log.i("MainActivity", "Name:" + nam);
Toast.makeText(getApplicationContext(), "Writing name : " + nam, Toast.LENGTH_SHORT).show();
Log.i("MainActivity", "Rating:" + rat);
Toast.makeText(getApplicationContext(), "Writing rating : " + rat, Toast.LENGTH_SHORT).show();
Log.i("MainActivity", "Vicinity:" + addr);
Toast.makeText(getApplicationContext(), "Writing Address : " + addr, Toast.LENGTH_SHORT).show();
}
return hotellist;
} catch (JSONException e) {
e.printStackTrace();
}
}
return null;
}
答案 0 :(得分:0)
您可以使用&#39; 有&#39;检查密钥是否存在的方法。
if (res.has("name")) {
String nam = res.getString("name");
wthr.setName(nam);
}
if (res.has("rating")) {
String rat = res.getString("rating");
wthr.setRating(rat);
}else{
wthr.setRating(0);
}