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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:07:05