2017-08-30 4 views
1

J'évalue Circé et je n'ai pas pu savoir comment utiliser le filtre pour les tableaux pour transformer un JSON. J'ai lu le guide sur son site Web et doc API, toujours pas la moindre idée. Aide beaucoup apprécié.Filtrer un tableau d'objets pour modifier json avec circe

données de l'échantillon:

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

Tâche:

Comment utiliser un filtre pour les employés pour transformer le JSON à un autre JSON, par exemple, tous les employés avec l'âge de plus de 50?

Pour une raison quelconque, je ne peux pas filtrer à partir de la source de données avant que JSON soit généré, au cas où vous le demanderiez.

Merci

Répondre

1

Une façon possible de le faire est par

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