如何跳过 json4s 中字段的反序列化
HowTo skip deserialization for a field in json4s
这是我的 json:
{
"stringField" : "whatever",
"nestedObject": { "someProperty": "someValue"}
}
我想把它映射到
case class MyClass(stringField: String, nestedObject:String)
nestedObject
不应反序列化,我希望 json4s 将其保留为字符串。
结果实例应该是:
val instance = MyClass(stringField="whatever", nestedObject= """ { "someProperty": "someValue"} """)
在json4秒内不明白怎么做。
您可以定义自定义序列化程序:
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])
将输出:
MyClass(whatever,{"someProperty":"someValue"})
代码 运行 在 Scastie
这是我的 json:
{
"stringField" : "whatever",
"nestedObject": { "someProperty": "someValue"}
}
我想把它映射到
case class MyClass(stringField: String, nestedObject:String)
nestedObject
不应反序列化,我希望 json4s 将其保留为字符串。
结果实例应该是:
val instance = MyClass(stringField="whatever", nestedObject= """ { "someProperty": "someValue"} """)
在json4秒内不明白怎么做。
您可以定义自定义序列化程序:
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])
将输出:
MyClass(whatever,{"someProperty":"someValue"})
代码 运行 在 Scastie