如何使用Kotlin在JSON对象内部迭代列表



我正在使用Fuel库从HTTP请求接收一个JSON对象,看起来像:

{
'items': ['item1', 'item2', 'item3']
}

我获取JSON对象的代码是:

Fuel.get("get_cameras").responseJson { request, response, result -> 
var my_json = result.get().obj()    
}

如何迭代"items"键?我试过:

for (items in  my_json) {}

但它说它没有迭代器((方法。我来自Python,可能有错误的想法,因为我看到了很多其他看似相似的问题,但似乎没有一个与我试图做的事情有关。

您需要首先使用"items"键获取嵌套在对象中的数组,然后可以对该数组进行迭代。做到这一点的基本方法(如果您确信它只包含字符串(是在其索引上循环,并为每个索引在数组上调用getString

val my_json = result.get().obj()
val items = my_json.getJSONArray("items")
for (i in 0 until items.length()) {
val item = items.getString(i)
// use item
}

如果你不想在迭代时处理索引,你可以将JSONArray的迭代包装成一个扩展函数:

fun JSONArray.forEachString(action: (String) -> Unit) {
for (i in 0 until length()) {
action(getString(i))
}
}

然后可以这样使用:

val items = my_json.getJSONArray("items")
items.forEachString { item ->
// use item
}

如果您真的想用正则for循环迭代数组,也可以用iterator函数扩展JSONArray类,但这会带来更多麻烦。

最新更新