You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin解析Assets中JSON文件遇JsonDecodingException错误解决

解决Kotlinx.serialization解析Assets目录JSON时的JsonDecodingException错误

问题场景

在Android Kotlin项目中,使用kotlinx.serialization库解析Assets目录下的collocations.json文件时,运行时抛出JsonDecodingException,错误提示如下:

Expected start of the object '{', but had 'EOF' instead

错误原因

最初的代码直接将文件名字符串传入Json.decodeFromString()方法,而非文件的实际JSON内容。解析器尝试解析"collocations.json"这个文本,而非真正的JSON数据,自然找不到JSON对象的起始标记{,触发EOF(文件结束)错误。

解决方案

通过Assets管理器打开目标文件,读取完整的JSON文本内容后,再将内容传入反序列化方法。

代码示例

1. 序列化数据类定义

@Serializable
data class CollocationGroup(
    val A: List<Collocation>,
    val B: List<Collocation>,
    // 其他字母分组按需定义
)

@Serializable
data class Collocation(
    val word: String,
    val partners: List<String>
)

2. 错误代码示例(直接传入文件名)

// 错误写法:将文件名当作JSON内容传入解析方法
val collocations = Json.decodeFromString<CollocationGroup>("collocations.json")

3. 正确代码示例(读取Assets文件内容)

// 先读取Assets文件的完整内容,再进行解析
val jsonStr: String = context.assets.open("collocations.json").bufferedReader().use { it.readText() }
val collocations = Json.decodeFromString<CollocationGroup>(jsonStr)

4. 示例JSON结构(collocations.json)

{
  "A": [
    {
      "word": "abandon",
      "partners": ["ship", "hope"]
    }
  ],
  "B": [
    {
      "word": "break",
      "partners": ["news", "promise"]
    }
  ]
}

内容的提问来源于stack exchange,提问作者NewPartizal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:50:56