2

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

样本数据:

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

任务:

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

出于某种原因,如果您询问,我无法在生成 JSON 之前从数据源中过滤。

谢谢

4

1 回答 1

2

一种可能的方法是通过

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")
于 2017-08-30T10:14:17.303 回答