首先,我想要检索嵌套在评级名称中的所有费率值,并假设我不知道那里有多少个评级,所以应该有某种循环来检查它们。 json对象如下所示。
{
"restaurant": [
{
"restaurantId": "1",
"restaurantName": "Restaurant A",
"area": "Skudai",
"state": "Johor",
"rating": [
{
"ratingId": "1",
"rate": "5",
"comment": null,
"userId": "15"
},
{
"ratingId": "2",
"rate": "4",
"comment": null,
"userId": "14"
}
]
},
{
"restaurantId": "2",
"restaurantName": "Restaurant 2",
"area": "Skudai",
"state": "Johor",
"rating": null
}
],
"success": 1
}
下面是在while循环中的retrieveng部分看起来不太正确的代码。对于getAverage中的JSONObject参数,我已经选择了第一家餐厅,即餐厅A,餐厅2不包括在内。
public int getAverage(JSONObject jsonObject){
int average = 0, count = 0;
while (jsonObject.has("rate")){
average += Integer.parseInt(jsonObject.optString("rate"));
count++;
}
average /= count;
return average;
}
如何使用optString()从嵌套评级中检索rate的倍数值来计算平均值,还是应该使用其他方式来检索它?
答案 0 :(得分:3)
您可以将此代码用于参考:
ArrayList<DrawerCategory> list = new ArrayList<DrawerCategory>();
ArrayList<DrawerSubCategory> ch_list;
JSONArray jArray = root.getJSONArray("restaurant");
for (int i = 0; i < jArray.length(); i++) {
JSONObject jObject = jArray.getJSONObject(i);
DrawerCategory gru = new DrawerCategory();
gru.setrestaurantId(jObject.getString("restaurantId"));
.
.
if (jObject.getString("rating").trim().equalsIgnoreCase("null")) {
ch_list = new ArrayList<DrawerSubCategory>();
DrawerSubCategory ch = new DrawerSubCategory();
ch.setName(jObject.getString("rating"));
ch_list.add(ch);
gru.setItems(ch_list);
} else {
JSONArray jArray1 = jObject.getJSONArray("rating");
ch_list = new ArrayList<DrawerSubCategory>();
for (int j = 0; j < jArray1.length(); j++) {
JSONObject jObject1 = jArray1.getJSONObject(j);
DrawerSubCategory ch = new DrawerSubCategory();
ch.setratingId(jObject1.getString("ratingId"));
.
.
ch_list.add(ch);
gru.setItems(ch_list);
}
}
list.add(gru);
}
这里,DrawerCategory,DrawerSubCategory是包含getter和setter方法的item类。
答案 1 :(得分:2)
如果您不想使用库,则可以解析json字符串以获得所有&#34;评级&#34;对于每家餐馆。
示例:
try{
JSONObject o = new JSONObject(json);
JSONArray restaurants = o.getJSONArray("restaurant");
for(int i = 0; i < restaurants.length(); i++){
JSONObject restaurant = restaurants.getJSONObject(i);
JSONArray ratings = restaurant.getJSONArray("rating");
for(int j = 0; j < ratings.length(); j++){
JSONObject rating = ratings.getJSONObject(j);
String ratingId = rating.getString("ratingId");
Log.d("TestJson ratingId", ratingId);
String rate = rating.optString("rate");
Log.d("TestJson rate", rate);
}
}
}catch(Exception e){
e.printStackTrace();
}
答案 2 :(得分:0)
Google已经制作了图书馆。
您不需要编写循环和所有。更好的是你应该使用 Java类(模型/ POJO)序列化/反序列化库gson 它会自动将您的类转换为 JSON / JSONArray 。
请不要练习编写长for
个循环。我有很多时候只使用 gson 来解析带有数组的类。
如果您使用的是android studio GSON with studio
,请提供帮助