【问题标题】:How to deserialisze an Array of Array of Objects into List of Pojos using Gson如何使用 Gson 将对象数组反序列化为 Pojo 列表
【发布时间】:2020-11-16 12:20:55
【问题描述】:

例如: POJO是

class Student(val name : String, val age : Int)

JSON 字符串是

[["Avinash", 21], ["Sai", 23], ["pavan", 30]]

我希望 gson 将 JSON 反序列化为 List<Student>,我尝试使用 TypeToken 但它不起作用

【问题讨论】:

  • TypeToken 与此无关。为什么你认为 Gson 应该自动将 nameage 映射到 [0][1] 而不给出它应该如何做的任何提示?
  • 嗯是的,有没有办法做到这一点?
  • 实现一个自定义类型适配器,将数组元素转换为正确的Student构造函数参数并调用构造函数。
  • json可以修改吗?如果可以的话,我会从这个开始,因为目前它的设计非常糟糕,元素的位置映射到特定的字段

标签: json kotlin gson deserialization typetoken


【解决方案1】:

谢谢你,这对我有用

数据类学生( 值名称:字符串, 验证年龄:诠释 )

有趣的 main() {

val json = "[['AVINASH' , 21] , ['Sai' , 23]]"
val type = object : TypeToken<List<Student>>() {}.type

val gsonBuilder = GsonBuilder()

gsonBuilder.registerTypeAdapter(Student::class.java, object : JsonDeserializer<Student> {
    override fun deserialize(json: JsonElement, p1: Type?, p2: JsonDeserializationContext?): Student {
        val studentArray = json.asJsonArray
        return Student(studentArray[0].asString , studentArray[1].asInt)
    }

})


var list: List<Student> = gsonBuilder.create().fromJson(json, type)

print(list)

}

【讨论】:

  • 很高兴你想通了。 :) 但是,如果可能的话,请遵循 kdev 的建议来修复 JSON 格式,而不是那样。
猜你喜欢
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多