我正在评估Circe,但无法找到如何使用数组过滤器来转换JSON。我在其网站和API文档上阅读了指南,仍然没有任何线索。非常感谢。
示例数据:
{
"Department" : "HR",
"Employees" :[{ "name": "abc", "age": 25 }, {"name":"def", "age" : 30 }]
}
任务:
如何使用Employees过滤器将JSON转换为另一个JSON,例如,年龄大于50岁的所有员工?
出于某种原因,我无法在生成JSON之前从数据源进行过滤,以防您提出。
由于
答案 0 :(得分:1)
这样做的一种可能方法是
val data = """{"Department" : "HR","Employees" :[{ "name": "abc", "age": 25 }, {"name":"def", "age":30}]}"""
def ageFilter(j:Json): Json = j.withArray { x =>
Json.fromValues(x.filter(_.hcursor.downField("age").as[Int].map(_ > 26).getOrElse(false)))
}
val y: Either[ParsingFailure, Json] = parse(data).map( _.hcursor.downField("Employees").withFocus(ageFilter).top.get)
println(s"$y")