gson 无法将JSONArray转换为列表(Kotlin)

kulphzqa  于 2022-11-06  发布在  Kotlin
关注(0)|答案(2)|浏览(226)

这是我的字符串:

{"array":[{"message":"test1","name":"test2","creation":"test3"},{"message":"test1","name":"test2","creation":"test3"}]}

我想让它把这个数组放到Kotlinapp for Android的对象列表中。我试着用这个网站上的两个例子来做这件事...所以下面是我的代码(res =那个字符串):

val gson = Gson()
val obj = gson.fromJson(res, JsonObject::class.java)
val arr = obj.getAsJsonArray("array")

println(arr.toString())
val list1 : List<JThread> = gson.fromJson(arr, object : TypeToken<List<JThread>>() {}.type)
val list2 = gson.fromJson(arr, Array<JThread>::class.java).asList()

for (x in list1){
   println(x.message)
}
for (x in list2){
   println(x.message)
}

但是我只在x.message中得到了null。我不知道哪里出错了。我还尝试在所有地方将arr改为arr.toString(),但也没有成功。
此外,JThread还具有以下特点:

object JThread {
var message: String? = null
var name: String? = null
var creation: String? = null }
8xiog9wr

8xiog9wr1#

这可以在没有GSON或任何其他第三方库的情况下完成:

@Throws(JSONException::class)
fun JSONObject.toMap(): Map<String, Any> {
    val map = mutableMapOf<String, Any>()
    val keysItr: Iterator<String> = this.keys()
    while (keysItr.hasNext()) {
        val key = keysItr.next()
        var value: Any = this.get(key)
        when (value) {
            is JSONArray -> value = value.toList()
            is JSONObject -> value = value.toMap()
        }
        map[key] = value
    }
    return map
}

@Throws(JSONException::class)
fun JSONArray.toList(): List<Any> {
    val list = mutableListOf<Any>()
    for (i in 0 until this.length()) {
        var value: Any = this[i]
        when (value) {
            is JSONArray -> value = value.toList()
            is JSONObject -> value = value.toMap()
        }
        list.add(value)
    }
    return list
}

用于将JSONArray转换为列表的用法:

val jsonArray = JSONArray(jsonArrStr)
val list = jsonArray.toList()

将JSONObject转换为Map的用法:

val jsonObject = JSONObject(jsonObjStr)
val map = jsonObject.toMap()

更多信息请访问here

jobtbby3

jobtbby32#

使用此代码:

import com.google.gson.annotations.SerializedName
import com.google.gson.Gson

data class Array(
    @SerializedName("message")
    var message: String,
    @SerializedName("name")
    var name: String,
    @SerializedName("creation")
    var creation: String
)

data class Example(
    @SerializedName("array")
    var array: List<Array>? = null
)

private fun fromJson(json:String):Example{
    return Gson().fromJson<Example>(json, Example::class.java)
}

PS:我用这个网站做的:http://www.jsonschema2pojo.org/

相关问题