[英]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.