Amb*_*ran 55 android json kotlin
我正在使用Kotlin和Realm编写Android应用程序.我有一个JSONArray,我想迭代这个数组中的JSONObjects,以便在Realm数据库类中加载它们:
领域类:
import io.realm.RealmObject
import io.realm.annotations.PrimaryKey
import io.realm.annotations.Required
open class Person(
@PrimaryKey open var id: Long = 0,
@Required
open var name: String = ""
) : RealmObject() {
}
Run Code Online (Sandbox Code Playgroud)
JSONArray:
{
"persons":[
{
"id":0,
"name":"Biatrix"
},
{
"id":1,
"name":"Bill"
},
{
"id":2,
"name":"Oren"
},
{
"id":3,
"name":"Budd"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我试过迭代如下:
for (item : JSONObject in persons) {
}
Run Code Online (Sandbox Code Playgroud)
......但是我收到了for-loop range must have an iterator() method错误.
0x6*_*x60 103
不幸的是,JsonArray不暴露迭代器.所以你必须使用索引范围迭代它:
for (i in 0 until persons.length())) {
val item = persons.getJSONObject(i)
// Your code here
}
Run Code Online (Sandbox Code Playgroud)
Ily*_*lya 38
即使某个类没有公开iterator方法,您仍然可以for通过提供扩展函数来使用statement 迭代它iterator:
operator fun JSONArray.iterator(): Iterator<JSONObject>
= (0 until length()).asSequence().map { get(it) as JSONObject }.iterator()
Run Code Online (Sandbox Code Playgroud)
现在,当您使用JSONArrayin for语句时,将调用此扩展来获取迭代器.它创建一系列索引并将每个索引映射到与此索引对应的项目.
我认为强制转换JSONObject是必需的,因为数组不仅可以包含对象,还可以包含基元和其他数组.这里的asSequence调用是以map懒惰的方式执行操作.
怎么样
(0..(jsonArray.length()-1)).forEach { i ->
var item = jsonArray.getJSONObject(i)
}
Run Code Online (Sandbox Code Playgroud)
?
| 归档时间: |
|
| 查看次数: |
29463 次 |
| 最近记录: |