我正在使用谷歌地方api附近的酒店搜索,在JSON响应中,如果某些酒店有“评级”密钥可用,对于一些酒店,“评级”密钥不可用。因此,json解析器无法找到某些json对象的评级键 - 它通过给出error->来停止解析
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;
}
您可以使用'has'方法检查密钥是否存在。
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);
}