我正在尝试将 json 字符串从包解析为对象。 但我收到错误:
java.lang.IllegalStateException:预期为 BEGIN_OBJECT,但实际为 STRING 在第 1 行第 2 列路径 $
这是我的代码:
val jsonString = bundle.getString(key)
val type = Info::class.java
val json = Gson().fromJson(jsonString, type)
我的
Info
数据类:
data class Info(
val id: Long,
val canProceed: Boolean,
val wasAdded: Boolean,
)
我尝试评估表达式,我发现
bundle.getString(key)
返回
"{\"id\":6067857,\"canProceed\":false,\"wasAdded\":false}"
一切看起来都不错,但由于某种原因,我收到了上面描述的错误。此外,如果在表达式求值模式下,我从
bundle.getString(key)
复制返回值并手动替换它,如下所示:
Gson().fromJson("{\"id\":6067857,\"canProceed\":false,\"wasAdded\":false}", type)
然后一切顺利,我得到了对象。可能是什么问题?
请帮助我。
附注 我传递给我的包的内容:
val info: Info = Info(id = 6067857, canProceed = false, wasAdded = false)
bundle.putString(key, Gson().toJson(info))
您收到的错误消息表明 预期 BEGIN_OBJECT 但在第 1 行是 STRING ,这意味着 Gson 期望您的 JSON 字符串带有对象括号
{
而不是带有左引号 "
。
您分享的内容还显示您有一个 JSON 字符串。
bundle.getString(key)
返回一个 JSON 字符串,并且您所编写的内容可以正常工作。
如果你编写下面的代码,它应该可以工作:
val json = Gson().fromJson(bundle.getString(key), Info::class.java)