FireStore返回数据Gson解析报MalformedJsonException的解决方法
解决Firestore数据Gson解析报错问题
错误原因
你调用task.result.data.toString()得到的是Firestore Map对象的字符串表示,并非标准JSON格式:
- 键值对用
=分隔,不符合JSON要求的: - 字符串值没有英文双引号包裹
- 当字符串包含空格(比如
comment字段内容)时,Gson会误判对象未结束,抛出MalformedJsonException
你手动添加引号后能解析,是因为格式接近了JSON规范(注意需使用英文双引号",而非中文引号“”)。
正确解决方案
方法1:直接用Firestore内置的对象转换(推荐)
Firestore的DocumentSnapshot自带toObject()方法,无需借助Gson,直接将快照转换为数据类:
val profile = task.result.toObject(Profile::class.java)
方法2:用Gson先将Map转成标准JSON字符串
如果必须使用Gson,先把Firestore返回的Map<String, Any>转成标准JSON字符串,再解析:
// 将Firestore的Map数据转为标准JSON字符串 val jsonString = Gson().toJson(task.result.data) // 解析为Profile对象 val profile = Gson().fromJson(jsonString, Profile::class.java)
数据类适配调整
注意imageUrl可能出现None这类空值场景,需将其设为可空类型,避免空指针或解析错误:
data class Profile( var imageUrl: String? = null, // 设为可空并赋予默认值 var email: String, var name: String, var comment: String )
内容的提问来源于stack exchange,提问作者Denis Jung
相关产品推荐
相关产品推荐

