Tengo JSON como a continuación
{ "name" : "sahal", "address" : [ { "state" : "FL" }, { "country" : "FL", "city" : { "type" : "municipality", "value" : "California City" } }, { "pin" : "87876" } ] } Ninguna de las claves: valor es constante. El nombre puede cambiar en cualquier momento. Y en algún momento el nombre viene como FirstName .
Probé con @JsonAnySetter y @JsonNode. Estos trabajos con una sola jerarquía
¿Alguna otra forma en que pueda hacer esto y reutilizarlo para otra estructura JSON sin escribir el Pojo para cada proyecto?
Considere usar JsonNode y fusionar un ciclo de jerarquía para extraer todas las claves y valores de forma dinámica, independientemente de los patrones, las relaciones y los valores.
public static void main(String[] args) throws JsonProcessingException { //which hierarchy is your json object JsonNode node = nodeGenerator(hierarchy); JSONObject flat = new JSONObject(); node.fields().forEachRemaining(o -> { if (!o.getValue().isContainerNode()) flat.put(o.getKey(), o.getValue()); else { parser(o.getValue(), flat); } }); System.out.println(flat); System.out.println(flat.get("type")); } public static JsonNode nodeGenerator(JSONObject input) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); return mapper.readTree(input.toString()); } public static void parser(JsonNode node, JSONObject flat) { if (node.isArray()) { ArrayNode array = node.deepCopy(); array.forEach(u -> u.fields().forEachRemaining(o -> { if (!o.getValue().isContainerNode()) flat.put(o.getKey(), o.getValue()); else { parser(o.getValue(), flat); } })); } else { node.fields().forEachRemaining(o -> flat.put(o.getKey(), o.getValue())); } }