KotlinでJSONArrayを反復処理する
1. 序章
このチュートリアルでは、JSONArrayを反復処理する方法を説明します。
まず、forループでそれを実行してみます。 次に、拡張機能を作成してさらに簡単にする方法を見ていきます。
2. JSONArrayを反復処理します
JSONArrayクラスはイテレータ演算子を実装していません。 したがって、通常のfor-eachパターンを使用してJSONArrayを反復することはできません。
代わりに使用できる他のいくつかの方法を見てみましょう。
2.1. for Loopを介した反復
for ループを使用して、JSONArrayを反復処理できます。
val booksJSONArray = JSONArray(BOOKS_STRING)
for (i in 0 until booksJSONArray.length()) {
val book = booksJSONArray.getJSONObject(i)
println("${book.get("book_name")} by ${book.get("author")}")
}
for-eachループを使用することもできます。
val booksJSONArray = JSONArray(BOOKS_STRING)
(0 until booksJSONArray.length()).forEach {
val book = booksJSONArray.getJSONObject(it)
println("${book.get("book_name")} by ${book.get("author")}")
}
これにより、物事が少し読みやすくなります。 ただし、イテレータを使用するほど直感的ではありません。
2.2. 便利な拡張機能の追加
典型的な反復パターンは次のようになります。
val numbers = arrayListOf(1,2)
for (number in numbers){
...
}
ここでは、ArrayListがIterableを実装しているため、このパターンを使用できます。 悲しいことに、 JSONArray それを実装していません
ただし、拡張関数を使用してこれを機能させることができます。
operator fun <T> JSONArray.iterator(): Iterator<T> =
(0 until this.length()).asSequence().map { this.get(it) as T }.iterator()
ここでは、イテレータ演算子をJSONArrayに追加します。 最後に、これにより、通常の方法のようにループできます。
for (book in booksJSONArray) {
println("${(book as JSONObject).get("book_name")} by ${(book as JSONObject).get("author")}")
}
3. 結論
要約すると、JSONArrayはイテレータを公開しません。 上記のように、1つのオプションは for-loopsを使用することです。また、拡張機能を使用してイテレーターで後付けすることもできます。
いつものように、コード例はGitHubで利用できます。