繁体   English   中英

如何跳过 json4s 中字段的反序列化

[英]HowTo skip deserialization for a field in json4s

这是我的 json:

{
  "stringField" : "whatever",
  "nestedObject": { "someProperty": "someValue"}
}

我想 map 它到

case class MyClass(stringField: String, nestedObject:String)

nestedObject不应该被反序列化,我希望 json4s 将其保留为字符串。

结果实例应该是:

val instance = MyClass(stringField="whatever", nestedObject= """ { "someProperty": "someValue"} """)

不明白如何在json4s中做到这一点。

您可以定义自定义序列化程序:

case object MyClassSerializer extends CustomSerializer[MyClass](f => ( {
  case jsonObj =>
    implicit val format = org.json4s.DefaultFormats
    val stringField = (jsonObj \ "stringField").extract[String]
    val nestedObject = compact(render(jsonObj \ "nestedObject"))

    MyClass(stringField, nestedObject)
}, {
  case myClass: MyClass =>
    ("stringField" -> myClass.stringField) ~
      ("nestedObject" -> myClass.nestedObject)
}
))

然后将其添加到默认格式化程序:

implicit val format = org.json4s.DefaultFormats + MyClassSerializer
println(parse(jsonString).extract[MyClass])

将 output:

MyClass(whatever,{"someProperty":"someValue"})

Scastie运行的代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM