2015-10-19 4 views
2

Я использую org.json.simple.JSONArray и org.json.simple.JSONObject. Я знаю, что эти два класса JSONArray и JSONObject несовместимы, но все же я хочу сделать довольно естественную вещь - я хочу для каждого по JSONArray разбора на каждом этапе итерации один JSONObject (вложенный внутри этого JSONArray). Я пытаюсь сделать это следующим образом:Работа с JSONArray и JSONObject

JSONArray arr = ...; // <-- got by some procedure 
for(JSONObject o: arr){ 
    parse(o); 
} 

Когда я пытаюсь скомпилировать этот код, на самом деле я получаю «несовместимые тип» ошибку, даже если это выглядит так естественно. Итак, мой вопрос заключается в том, что является лучшим способом для итерации через JSONArray?

ответ

14

Видимо, org.json.simple.JSONArrayреализует сырую итератора. Это означает, что каждый элемент считается Object. Вы можете попробовать:

for(Object o: arr){ 
    if (o instanceof JSONObject) { 
     parse((JSONObject)o); 
    } 
} 

Так было сделано на Java 1.4 и ранее.

+0

Спасибо! Оно работает. Хотя, похоже, я сделал это с помощью 'java.util.Iterator' – Jacobian

+0

@Jacobian Да, это' java.util.Iterator', но это * raw * one (например, 'List ' будет возвращать 'Iterator ', а затем вы можете использовать' String' как расширенный тип переменной цикла. Когда он является сырым, базовый тип считается 'Object'. – RealSkeptic

+0

Спасибо! Я получил его! – Jacobian

10

Похоже, вы не можете проходить через JSONArray с for each. Вы можете цикл через ваш JSONArray как это:

for (int i=0; i < arr.length(); i++) { 
    arr.getJSONObject(i); 
} 

Source

+0

Спасибо! Проверяют это через секунду. – Jacobian

+0

К сожалению, это похоже на 'JSONArray' из' org.json.simple. * 'Не имеет' length() 'method и' getJSONObject() ' – Jacobian

+0

@Jacobian Вы пытались использовать' org.json.JSONArray'? – dguay

7

, если вы используете Java 8, то вы можете использовать

JSONArray array = ...; 

array.forEach(item -> { 
    JSONObject obj = (JSONObject) item; 
    parse(obj); 
}); 
+0

может достичь того же, если использовать [retrolambda] (http://www.vogella.com/tutorials/Retrolambda/article.html) с java 7 – Fonix

+0

Метод forEach (( item) -> {}) не определен для типа JSONArray – Prakhyat

+0

Это больше не работает. как это делается в Java 8: https://stackoverflow.com/questions/42854505/how-to-iterate-over-a-jsonarray-in-java-8 – akcasoy

Смежные вопросы