package org.softlang.company.features; import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonArrayBuilder; import javax.json.JsonNumber; import javax.json.JsonObject; import javax.json.JsonObjectBuilder; import javax.json.JsonValue; public class Cut { /** * @param obj * input JSON object * @return output JSON object */ public static JsonObject cut(JsonObject obj) { JsonObjectBuilder builder = Json.createObjectBuilder(); for (String key : obj.keySet()) cut(builder, key, obj.get(key)); return builder.build(); } /** * @param arr * input JSON array * @return output JSON array */ public static JsonArray cut(JsonArray arr) { JsonArrayBuilder builder = Json.createArrayBuilder(); for (JsonValue item : arr) cut(builder, item); return builder.build(); } /** * @param builder * An object builder to which to add to * @param key * A key for the input value * @param val * The input value */ private static void cut(JsonObjectBuilder builder, String key, JsonValue val) { switch (val.getValueType()) { case NUMBER: Double num = ((JsonNumber) val).doubleValue(); if (key.equals("salary")) // Halve salary num /= 2; builder.add(key, num); break; case OBJECT: builder.add(key, cut((JsonObject) val)); break; case ARRAY: builder.add(key, cut((JsonArray) val)); break; default: builder.add(key, val); break; } } /** * @param builder * An array builder to which to add to * @param val * The input value */ private static void cut(JsonArrayBuilder builder, JsonValue val) { switch (val.getValueType()) { case OBJECT: builder.add(cut((JsonObject) val)); break; case ARRAY: builder.add(cut((JsonArray) val)); break; default: builder.add(val); break; } } }