为对象序列提供 JsonFormat

2024-04-21

我试图在这里找到一些帮助来应用 DefaultJsonProtocol 的 JsonFormat 扩展 包含对象序列的类。

所以对于课程来说:

class Person(val name: String, [......], val adresses: Seq[Adress])
class Adress(val streetname: String, val plz: BigDecimal, val city: String)

现在我想应用我的 JsonFormat:

object PersonJsonProtocol extends DefaultJsonProtocol {
  implicit object PersonJsonFormat extends RootJsonFormat[Person] {
    def write(pers: Person) = JsObject(
    "name" -> JsString(pers.name),
    [......],
    "adresses" -> JsArray(pers.adresses)
)
def read(value: JsValue) = {...}
}

但实际上我不知道该怎么做。 我搜索了 Spray-json 文档并通过 google、stackoverflow & Co. 我对 Scala/Spray 完全陌生,也许我只是没有抓住重点。所以也许这里有人很友善地帮助我。没有地址序列我就可以工作。

使用示例中提供的 JsArray,我得到类型不匹配。它期待 List[JsValue] 但也转换为列表,不匹配仍然存在。

我还尝试插入一个单独的 Adress JsonProtocol 并通过以下方式包含它: "addresses" -> Adress JsonFormat.write(pers.adresses) 但它又是一个序列...


您不需要为每个案例类编写一个 DefaultJsonProtocol,除非您想要一些特殊的逻辑(格式化、过滤...)

您是否尝试过简单地使用默认的案例类序列化?

implicit val formatPerson = jsonFormat6(Adress)
implicit val formatAddress = jsonFormat3(Adress)

jsonFormat 中的数字'number' 代表您的案例类别中的成员数量。

然后在序列化 Person 时,spray-json 将处理嵌套的 Address 集合。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为对象序列提供 JsonFormat 的相关文章

随机推荐