gson 从json数组Kotlin中获取模型列表

iqxoj9l9  于 2023-01-30  发布在  Kotlin
关注(0)|答案(1)|浏览(173)

在我的代码中,我尝试从json文件中获取Income类型的对象列表

val fileJson = File(
        Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS),
        "Income.json")
    val strFileJson: String? = fileJson.readText()
    val PreviousJsonObj: JSONObject = JSONObject(strFileJson)
    val array: JSONArray = PreviousJsonObj.getJSONArray("Incomes")
    val typeToken = object : TypeToken<List<Income>>() {}.type
    IncomeArry = Gson().fromJson<List<Income>>(strFileJson, typeToken)

但是我得到的是com.google.gson.jsonSyntaxException:java.lang.IllegalStateException:应为BEGIN_ARRAY,但在第1行第2列路径$处为BEGIN_OBJECT
strFileJson中返回的值为"收入":[{"日期":" abc "," src ":"cfgb"、"amt":7890},{"日期":" yui ","源代码":" tyhv ","金额":6789}]
尝试使用gson的多个实现和多个类体系结构运行

yb3bgrhw

yb3bgrhw1#

您显示的JSON片段:

"Incomes":[{"date":"abc","src": "cfgb","amt": 7890}, {"date":"yui", "src":"tyhv","amt" :6789}]

格式不正确,是否粘贴错误?需要用大括号括起来:

{"Incomes":[{"date":"abc","src": "cfgb","amt": 7890}, {"date":"yui", "src":"tyhv","amt" :6789}]}

但这不会解决您的问题,因为两者都会给予您描述的错误。您正在尝试反序列化数组,因此您需要
1.将JSON更改为

[{"date":"abc","src": "cfgb","amt": 7890}, {"date":"yui", "src":"tyhv","amt" :6789}]

1.或者创建一个 Package 器对象,类似于

data class Incomes(
 val Incomes : List<Income>
)

并反序列化到其中。

相关问题