如何将 JsonObject 转换为类模型 kotlin android

Posted

技术标签:

【中文标题】如何将 JsonObject 转换为类模型 kotlin android【英文标题】:How to convert JsonObject to class model kotlin android 【发布时间】:2020-04-30 23:40:14 【问题描述】:

我从服务器接收一些数据并将其转换为 JsonArray。我想也许我可以将这个数组转换为普通的类对象数组,但我没能做到。我试着这样做:

val testArray = tpsObject.getAsJsonObject("questions")[tpsSelection[0].toString()].asJsonArray
  for (i in 0 until testArray.size()) 
Log.i("m",Gson().fromJson(testArray.get(i).asJsonObject.toString(),QuestionModel::class.java).question.toString())
   

但我收到错误:

 com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonObject but was com.google.gson.JsonArray

另一方面,我可以像这样在循环中显示 JsonArray 的所有元素:

Log.i("m",testArray.get(i).asJsonObject.toString())

我也尝试过这样做:

val jsonParser = JsonParser.parseString(testArray.get(i).asJsonObject.toString())
val model: QuestionModel = Gson().fromJson(jsonParser, QuestionModel::class.java)

但我收到类似的错误。那么也许有人知道如何解决这个问题?

更新

my json:
"1": [
    
        "answer_options": [
            
                "id": 216,
                "answer": "some text"
            ,
            
                "id": 217,
                "answer": "some text"
            ,
            
                "id": 218,
                "answer": "some text"
            ,
            
                "id": 219,
                "answer": "some text"
            ,
            
                "id": 220,
                "answer": "some text"
            
        ],
        "id": 949,
        "question": "some text"
    ,
               ...
               
        "answer_options": [
            
                "id": 216,
                "answer": "some text"
            ,
            
                "id": 217,
                "answer": "some text"
            ,
            
                "id": 218,
                "answer": "some text"
            ,
            
                "id": 219,
                "answer": "some text"
            ,
            
                "id": 220,
                "answer": "some text"
            
        ],
        "id": 949,
        "question": "some text"
    ,
],

我的模型类:

class QuestionModel 
    @SerializedName("question")
    @Expose
    var question: String? = null

    @SerializedName("id")
    @Expose
    var id: Int? = null

    @SerializedName("answer_options")
    @Expose
    var answer_options: JsonObject? = null

也许这有助于找到解决方案

【问题讨论】:

你可以发送你的json和QuestionModel类吗? @javadroid,我刚刚更新了我的问题 【参考方案1】:

我建议您改用kotlinx.serialization,但为了不成为一个老一套的 *** 用户,说“A 错了,做 B”,我也会尝试解决您的问题。

您确实需要发布您的 JSON(或其 sn-p)和类定义,否则很难为您提供帮助。基本问题是您正在为 Gson 提供一个数组,但它想要一个对象。也许您实际上是在 JSON 中使用二维数组?给定堆栈跟踪,这将更容易调试。

此外,您似乎在对 JsonObject 调用 .toString() 之前对其进行反序列化,这意味着您正在重新序列化为 Json,然后再次返回...但是为什么呢?

【讨论】:

以上是关于如何将 JsonObject 转换为类模型 kotlin android的主要内容,如果未能解决你的问题,请参考以下文章

如何在django中把geojson文件转换为类模型?

如何将模型转换为 JSON

如何将模板定义转换为类

如何将此功能组件转换为类

如何将java中的map转换成jsonobject

如何将带有类名的字符串转换为类类型本身?