过滤一个对象数组以使用circe修改json

时间:2017-08-30 08:47:16

标签: circe

我正在评估Circe,但无法找到如何使用数组过滤器来转换JSON。我在其网站和API文档上阅读了指南,仍然没有任何线索。非常感谢。

示例数据:

{
 "Department" : "HR",
 "Employees" :[{ "name": "abc", "age": 25 }, {"name":"def", "age" : 30 }]
}

任务:

如何使用Employees过滤器将JSON转换为另一个JSON,例如,年龄大于50岁的所有员工?

出于某种原因,我无法在生成JSON之前从数据源进行过滤,以防您提出。

由于

1 个答案:

答案 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")