我想使用 LiftJson 或 Json4s 提取以下 Json(不完全是,但类似的东西)到以下案例类。
{
"data": [
{
"id": "1234",
"message": "Test",
"comments": {
"data": [
{
"id": "4321",
"content": "Test2",
}
]
}
}
案例类:
case class A(id: String, message: string, comments: List[B])
case class B(id: String, content: String)
对于顶级,我可以做:(val "data").extract[List[A]]
扁平化额外的数据字段。但是对于第二级,我认为我无法直接使用提取。
我可以使用自定义序列化程序(此处的示例)或以下任何函数(json4s)来删除无关的"数据"字段吗?或者有什么想法让它变得简单?
def mapField(f: JField => JField): JValue
def transformField(f: PartialFunction[JField, JField]): JValue
我想避免的是创建其他中间案例类来提取数据,然后使用它创建显示的案例类。
我不久前找到了解决方案,但没有时间回复。我在向后思考,这很容易:
def transformListData(src: JValue, field: String): JValue = {
src.transformField {
case JField(x, v) if x == field => JField(field, v "data")
}
}
transformListData(json, "comments")
以下内容将删除额外的data
并使列表扁平化。