我有一个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"
}
答案 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键,例如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);
将输出:
mazda, vw, ford
最好将JSON结构更改为具有可预测的键,例如
{
"carModels": [
{
"brand": "toyota",
"color": "green"
}
...
}