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

Kotlin使用serializable解析JSON时提示预期'{'却遇到EOF错误如何解决

错误根因

你定义的反序列化目标Books类对应JSON结构为外层是对象、内部有books字段存储书籍列表,但你传入的JSON根节点直接是书籍数组,结构完全不匹配。序列化库预期解析到对象起始符{,遍历完整个JSON输入都没有找到对应结构,因此抛出EOF异常。

解决方案

二选一即可:

方案1:直接反序列化为列表(推荐,代码改动最小)

不需要保留Books包装类和自定义序列化器,直接修改解析代码:

val books = Json.decodeFromString<List<Book>>(stringJson)

方案2:适配现有类调整JSON结构

如果必须保留Books包装类,修改JSON外层加一层对象包裹:

{
  "books": [
    // 原有书籍数组内容放置此处
  ]
}

额外优化建议

你当前JSON里的空值是字符串"null"而非JSON标准null,如果字段可能为空,建议做如下适配:

  1. 将Book类中可能为空的字段改为可空类型,示例:
@Serializable
data class Book(
    val epub : String?,
    val fb2 : String?,
    val mobi : String?,
    val djvu : String?,
    val title : String,
    val author : String,
    val anotation: String,
    val cover_uri : String?,
)
  1. 配置JSON解析参数兼容异常输入:
val json = Json {
    ignoreUnknownKeys = true // 忽略数据类未定义的字段,避免报错
    coerceInputValues = true // 自动将不匹配的输入(如字符串"null")转为对应类型的默认值/空值
}
val books = json.decodeFromString<List<Book>>(stringJson)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:15:02