遍历JSONObject中的JSONArray

时间:2018-08-02 21:26:21

标签: javascript java json iteration

我有一个JSONObject和一个JSONArray,还有一个钥匙。我想iterate遍历数组,并在每个red中找到所有颜色为JSONObject的汽车模型。

这是我到目前为止所拥有的,但是它给了我JSONException: JSONObject["color"] not found

JSONArray arr = responseBody.getJSONArray("carModels");
String redServices = "";
for(int i = 0; i < arr.length(); i++)
{
    if(arr.getJSONObject(i).get("color").equals("red"))
        redServices += arr.getJSONObject(i).toString() + ", ";      
}

这是jsonObject的示例

 {
  "carModels": [
    {
        "toyota": {
            "color": "green"
        }
    },
    {
        "mazda": {
            "color": "red"
        }
    },
    {
        "vw": {
            "color": "red"
        }
    },
    {
        "ford": {
            "color": "red"
        }
    },
    {
        "honda": {
            "color": "black"
        }
    },
    {
        "tesla": {
            "color": "white"
        }
    },

],
"average": "red"
}

2 个答案:

答案 0 :(得分:0)

请找到以下适用于给定json的代码,您可以根据实际json对其进行修改:

public String getRedServicesFromJSON(JSONObject object){
    JSONArray arr = object.getJSONArray("carModels");
    StringJoiner joiner = new StringJoiner(", ");
    for(int i = 0;i < arr.length(); i++){
        if("red".equals(arr.getJSONObject(i).getJSONObject(arr.getJSONObject(i).names().getString(0)).get("color")))
            joiner.add(arr.getJSONObject(i).toString());      
    }
    return joiner.toString();
}

答案 1 :(得分:0)

尽管我不喜欢JSONObject,但您需要考虑模型中具有随机值的JSON键,例如mazdavw。您可以使用names()方法来找到该值:

JSONArray carModels = responseBody.getJSONArray("carModels");
for (int i = 0; i < carModels.length(); i++) {
  JSONObject model = carModels.getJSONObject(i);
  JSONArray keys = model.names();
  for (int j = 0; j < keys.length(); j++) {
    Object key = keys.get(j);
    if (model.getJSONObject(key.toString()).get("color").equals("red")) {
      joiner.add(key.toString());
    }
  }
}
System.out.println(joiner);

将输出:

mazda, vw, ford

最好将JSON结构更改为具有可预测的键,例如

{
  "carModels": [
  {
    "brand": "toyota",
    "color": "green"
  }
  ...
}