为一系列对象提供JsonFormat

Kli*_*ink 4 json scala spray spray-json

我正在尝试找到一些帮助,将DefaultJsonProtocol的JsonFormat扩展应用于包含对象序列的类.

所以对于班级:

class Person(val name: String, [......], val adresses: Seq[Adress])
class Adress(val streetname: String, val plz: BigDecimal, val city: String)
Run Code Online (Sandbox Code Playgroud)

现在我想申请我的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) = {...}
}
Run Code Online (Sandbox Code Playgroud)

但实际上我不知道该怎么做.我通过spray-json文档搜索并通过google,stackoverflow&Co.我是Scala/Spray的新手,也许我只是错过了重点.所以也许有人在这里帮助我.没有地址序列我会工作.

使用示例中提供的JsArray,我得到类型不匹配.它是一个明确的List [JsValue],但也转换为列表不匹配仍然存在.

我还试图插入一个单独的AdressJsonProtocol并通过以下方式包含它:"地址" - > AdressJsonFormat.write(pers.adresses)但又是一个序列...

Arn*_*lay 9

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

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

implicit val formatPerson = jsonFormat6(Adress)
implicit val formatAddress = jsonFormat3(Adress)
Run Code Online (Sandbox Code Playgroud)

jsonFormat" number "中的数字代表您的案例类中的成员数.

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