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,如果字段可能为空,建议做如下适配:
- 将
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?, )
- 配置JSON解析参数兼容异常输入:
val json = Json { ignoreUnknownKeys = true // 忽略数据类未定义的字段,避免报错 coerceInputValues = true // 自动将不匹配的输入(如字符串"null")转为对应类型的默认值/空值 } val books = json.decodeFromString<List<Book>>(stringJson)
内容的提问来源于stack exchange,提问作者Nikita Baranov
相关产品推荐
相关产品推荐

