Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在JSONObject中迭代JSONArray_Javascript_Java_Json_Iteration - Fatal编程技术网

Javascript 在JSONObject中迭代JSONArray

Javascript 在JSONObject中迭代JSONArray,javascript,java,json,iteration,Javascript,Java,Json,Iteration,我有一个JSONObject和一个JSONArray,还有一个键。我想在数组中迭代,并在每个JSONObject中找到所有颜色为red的carmodel 这是我到目前为止所拥有的,但它给了我一个JSONException:JSONObject[“color”]未找到 JSONArray arr = responseBody.getJSONArray("carModels"); String redServices = ""; for(int i = 0; i < arr.length();

我有一个
JSONObject
和一个
JSONArray
,还有一个键。我想
在数组中迭代
,并在每个
JSONObject
中找到所有颜色为
red
的carmodel

这是我到目前为止所拥有的,但它给了我一个
JSONException:JSONObject[“color”]未找到

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() + ", ";      
}

请查找适用于给定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();
}
公共字符串getRedServicesFromJSON(JSONObject对象){
JSONArray arr=object.getJSONArray(“carModels”);
细木工=新细木工(“,”);
对于(int i=0;i
尽管我不喜欢
JSONObject
,但您需要考虑模型中JSON键的随机值,例如
mazda
vw
。您可以使用
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);
最好将JSON结构更改为具有可预测的键,例如

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

您的问题是,JSON既没有您在应用程序中使用的
服务
字段,也没有您在应用程序中使用的
状态
字段code@KarolDowbecki刚刚意识到,现在改变了。我试着概括这个问题,你没有逻辑来处理车名的钥匙。您可能应该重新构造json,使carModels列表中的单个项看起来像:{'color':'red','manufacturer':'tesla'},然后arr.getJSONObject(i).get(“color”).equals(“red”)可以工作字符串连接程序应该使用
,“
,但OP可能应该更改json结构。如果我可以,我通过API调用获取“JSONObject”,因此我无法控制json。我必须处理这个问题format@DavidConrad我在帮助他做合乎逻辑的部分。这件事可以由他来做。Thanks@StanY在这种情况下,您可以跳过函数的第一行,并可以传递JSONObject而不是字符串。@StanY根据您的输入进行编辑。我希望这对你有帮助。很有魅力!是否可以过滤结果以仅返回汽车型号?@StanY更新,带有
joiner.add
的行已更改
mazda, vw, ford
{
  "carModels": [
  {
    "brand": "toyota",
    "color": "green"
  }
  ...
}