Saltar al contenido

¿Cómo iterar todos los subnodos de un objeto json?

Estate atento porque en este escrito hallarás el resultado que buscas.Esta división fue evaluado por nuestros expertos para asegurar la calidad y exactitud de nuestro post.

Solución:

Esto funcionará para usted:

ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(json);
Map map = new HashMap<>();
addKeys("", root, map, new ArrayList<>());

map.entrySet()
     .forEach(System.out::println);

private void addKeys(String currentPath, JsonNode jsonNode, Map map, List suffix) 
    if (jsonNode.isObject()) 
        ObjectNode objectNode = (ObjectNode) jsonNode;
        Iterator> iter = objectNode.fields();
        String pathPrefix = currentPath.isEmpty() ? "" : currentPath + "-";

        while (iter.hasNext()) 
            Map.Entry entry = iter.next();
            addKeys(pathPrefix + entry.getKey(), entry.getValue(), map, suffix);
        
     else if (jsonNode.isArray()) 
        ArrayNode arrayNode = (ArrayNode) jsonNode;

        for (int i = 0; i < arrayNode.size(); i++) 
            suffix.add(i + 1);
            addKeys(currentPath, arrayNode.get(i), map, suffix);

            if (i + 1 ();
        

        ValueNode valueNode = (ValueNode) jsonNode;
        map.put(currentPath, valueNode.asText());
    

Para el json usted dio la salida será:

name-items-name-1-2=2nditem
name-items-name-1-1=firstitem
name-items-stock-1-1=12
name-first-1=John
name-items-stock-1-2=23
company=John Company
name-last-1=Doe

elements() te da un iterador para subnodos y fields() te da las propiedades.

Con eso, puede codificar una función recursiva que recorra todos los nodos.

Aquí hay una muestra de trabajo, la entrada es String

public static void main(String[] args) throws IOException 
    JsonNode node = om.readTree(input);
    LOG.info(node.toString());
    process("", node);


private static void process(String prefix, JsonNode currentNode) 
    if (currentNode.isArray()) 
        ArrayNode arrayNode = (ArrayNode) currentNode;
        Iterator node = arrayNode.elements();
        int index = 1;
        while (node.hasNext()) 
            process(!prefix.isEmpty() ? prefix + "-" + index : String.valueOf(index), node.next());
            index += 1;
        
    
    else if (currentNode.isObject()) 
        currentNode.fields().forEachRemaining(entry -> process(!prefix.isEmpty() ? prefix + "-" + entry.getKey() : entry.getKey(), entry.getValue()));
    
    else 
        LOG.info(prefix + ": " + currentNode.toString());
    

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *