json - 如何跳过 json4s 中字段的反序列化
问题描述
这是我的json:
{
"stringField" : "whatever",
"nestedObject": { "someProperty": "someValue"}
}
我想把它映射到
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])
将输出:
MyClass(whatever,{"someProperty":"someValue"})
在Scastie运行的代码
推荐阅读
- php - 在单个查询中插入 1000 行的重复键更新插入
- c# - Razor 组件中的绑定问题
- winforms - Microsoft Store Desktop Bridge 应用程序无法从网络共享访问“脱机文件”
- python - 如何将 DataFrame 的每一行导出到同一工作簿中的不同工作表?
- python - 使用 HBox 内的 Button 删除/隐藏 HBox 和子小部件
- html - 如何使表格的动态行成为标准高度?
- firebase - 大家好,我有一个关于npm的问题。npm 安装
- flutter - 无法在 pubspec.yaml 中找到资产条目。(字体)
- spring-boot - 使用“ddl-auto=update”时如何防止表已存在时的错误输出?
- jolt - 三元操作的 JOLT 规范