gpt4 book ai didi

json - 从 json 值解析 JSON 对象字符串

转载 作者:行者123 更新时间:2023-12-02 13:01:04 24 4
gpt4 key购买 nike

我正在向 API 发出请求,响应是一个 JSON 对象,这个 json 对象包含一个字符串,该字符串是另一个 json 对象。我正在尝试使用 kotlinx.serialization 来处理此对象的反序列化。

我可以自己覆盖反序列化功能,但是那种使用这个库的方式失败了

我希望这样的事情会奏效。

@Serializable
data class Foo(val data: Data)

@Serializable
data class Data(val foo: String)

对于类似以下对象
{
"data":"{\"foo\":\"bar\"}"
}

我希望得到一个带有属性数据的对象 Foo = 带有属性 foo = "bar"的对象数据

但是我收到以下错误
java.lang.IllegalStateException: Expected class kotlinx.serialization.json.JsonArray (Kotlin reflection is not available) but found class kotlinx.serialization.json.JsonLiteral (Kotlin reflection is not available)

最佳答案

您没有指定您如何进行反序列化。
要获得您期望的内容,您必须指定正确的序列化程序。

val expectedFoo = Json.parse(Foo.serializer(), """{"data":{"foo":"bar"}}""")

备注
在我的回答中,我假设您打算使用稍微不同的示例字符串。

在您的示例 json 字符串中, data键对应于字符串值,而不是对象。
请看下面的区别:
{
"data":"{\"foo\":\"bar\"}"
}
{
"data": { "foo": "bar" }
}

因此,在任何情况下,要解析原始示例,您都需要使用一些中间表示并解析其间的字符串表示。
@Serializable
data class Intermediate(val data: String)
//...
val intermediateFoo = Json.parse(Intermediate.serializer(), """{"data":"{\"foo\":\"bar\"}"}""")
val expectedFoo = Foo(data = Json.parse(Data.serializer(), intermediateFoo.data))

关于json - 从 json 值解析 JSON 对象字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57099416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com