Saya menggunakan org.json.simple.JSONArray
dan org.json.simple.JSONObject
. Saya tahu bahwa kedua kelas JSONArray
dan JSONObject
ini tidak kompatibel, tetapi saya masih ingin melakukan hal yang wajar - saya ingin melakukan for-each pada penguraian JSONArray
pada setiap langkah iterasi satu JSONObject
(bersarang di dalam JSONArray
). Saya mencoba melakukannya seperti ini:
JSONArray arr = ...; // <-- got by some procedure
for(JSONObject o: arr){
parse(o);
}
Ketika saya mencoba untuk mengkompilasi kode ini, memang saya mendapatkan "incompatible types" error, meskipun terlihat sangat alami. Jadi, pertanyaan saya adalah bagaimana cara terbaik untuk mengiterasi JSONArray
?
Rupanya, org.json.simple.JSONArray
mengimplementasikan raw Iterator. Ini berarti bahwa setiap elemen dianggap sebagai sebuah Objek
. Anda bisa mencoba untuk melakukan cast:
for(Object o: arr){
if ( o instanceof JSONObject ) {
parse((JSONObject)o);
}
}
Ini adalah bagaimana hal-hal yang dilakukan kembali di Java 1.4 dan sebelumnya.
jika Anda menggunakan Java 8 maka Anda dapat menggunakan
import org.json.JSONArray;
import org.json.JSONObject;
JSONArray array = ...;
array.forEach(item -> {
JSONObject obj = (JSONObject) item;
parse(obj);
});
Hanya menambahkan tes sederhana untuk membuktikan bahwa itu berhasil:
Tambahkan ketergantungan berikut ini ke dalam file pom.xml
Anda (Untuk membuktikan bahwa itu berfungsi, saya telah menggunakan jar lama yang ada di sana ketika saya memposting jawaban ini)
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
Dan potongan kode uji sederhana akan menjadi:
import org.json.JSONArray;
import org.json.JSONObject;
public class Test {
public static void main(String args[]) {
JSONArray array = new JSONArray();
JSONObject object = new JSONObject();
object.put("key1", "value1");
array.put(object);
array.forEach(item -> {
System.out.println(item.toString());
});
}
}
keluaran:
{"key1":"value1"}