package org.leumasjaffe.json; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.StreamSupport; import com.fasterxml.jackson.databind.JsonNode; import lombok.experimental.UtilityClass; @UtilityClass public class JsonHelper { public List toArray(final JsonNode array) { return StreamSupport.stream(array.spliterator(), false).collect(Collectors.toList()); } public List toArray(final JsonNode array, Function transform) { return StreamSupport.stream(array.spliterator(), false).map(transform).collect(Collectors.toList()); } public Set fieldNames(final JsonNode object) { Set rval = new HashSet<>(); object.fieldNames().forEachRemaining(rval::add); return rval; } public Set fieldNames(final JsonNode object, Function transform) { Set rval = new HashSet<>(); object.fieldNames().forEachRemaining(s -> rval.add(transform.apply(s))); return rval; } public Map fields(final JsonNode object) { Map rval = new HashMap<>(); object.fields().forEachRemaining(pair -> rval.put(pair.getKey(), pair.getValue())); return rval; } public Map fields(final JsonNode object, Function transform) { Map rval = new HashMap<>(); object.fields().forEachRemaining(pair -> rval.put(pair.getKey(), transform.apply(pair.getValue()))); return rval; } public Map fields(final JsonNode object, BiFunction transform) { Map rval = new HashMap<>(); object.fields().forEachRemaining(pair -> rval.put(pair.getKey(), transform.apply(pair.getKey(), pair.getValue()))); return rval; } }