如何将 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的主要内容,如果未能解决你的问题,请参考以下文章