私は org.json.simple.JSONArray
と org.json.simple.JSONObject
を使用しています。JSONArrayと
JSONObjectは互換性がないことは分かっていますが、ごく当たり前のことをしたいのです。つまり、
JSONArrayを for-each して、各反復ステップで一つの
JSONObject(
JSONArray` の内部に入れ子) をパースしたいのです。私はそれを次のようにしようとします。
JSONArray arr = ...; // <-- got by some procedure
for(JSONObject o: arr){
parse(o);
}
このコードをコンパイルしようとすると、とても自然に見えるにもかかわらず、確かに "incompatible types" というエラーが表示されます。そこで質問ですが、JSONArray
を繰り返し処理する最良の方法は何でしょうか?
Java 8 を使っている場合は
import org.json.JSONArray;
import org.json.JSONObject;
JSONArray array = ...;
array.forEach(item -> {
JSONObject obj = (JSONObject) item;
parse(obj);
});
それが動作することを証明するために、簡単なテストを追加しました:。
次の依存関係を pom.xml
ファイルに追加してください (動作することを証明するために、この回答を投稿したときにあった古い jar を使用しました)。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
そして、簡単なテストコードスニペットは、次のようになります。
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());
});
}
}
と出力されます。
{"key1":"value1"}