Por ejemplo, tengo el siguiente JSON:

{

        "field1": "value1",
        "field2: "value2",
        "array1" : [
                "field1": "value1",
                "field2: "value2",
                "array1" : [
                    "field1": "value1",
                    "field2: "value2",
                 ]
        ]

}

Podría tener más o anidar dentro con el mismo formato, ¿cómo puedo atravesarlo usando recursividad?

De acuerdo, parece que confundí un poco, el json podría ser el de arriba o el de abajo para aumentar los "nidos" como esa muñeca rusa:

{

        "field1": "value1",
        "field2: "value2",
        "array1" : [
                "field1": "value1",
                "field2: "value2",
                "array1" : [
                    "field1": "value1",
                    "field2: "value2",
                        "array1" : [
                            "field1": "value1",
                            "field2: "value2",
                     ]
                 ]
        ]

}
0
askwer 4 dic. 2019 a las 07:38

2 respuestas

ENFOQUE # 0

Convierta JSON a POJO y utilice la biblioteca gson, y puede iterar cualquier objeto desde POJO.

ENFOQUE # 1

No reinventes la rueda, ya que hay muchas bibliotecas que muchos contribuyentes han creado y mejorado las horas extraordinarias.

Utilice JSONPath

Puede acceder a un json complejo como el siguiente, haciendo uso del código a continuación,

Puede recorrer la lista a continuación utilizando el iterador.

// get first author 
String author0 = JsonPath.read(document, "$.store.book[0].author");

// get all titles 
List<String> titles = JsonPath.parse(JSON_DOCUMENT).read("$.store.book[*].title", typeRef);

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}
0
forkdbloke 4 dic. 2019 a las 05:04

Suponiendo que use Jackson o Gson, puede definir un POJO, que puede analizar e iterar como cualquier otro objeto

public class Foo {
    String field1, field2;
    List<Foo> array1;

    public static void traverse(Foo f) {
        if (f.array1 == null) return;
        // do something for current object 
        for (Foo next : f.array1) traverse(next);
        // do something after visiting all children 
   } 
} 
0
cricket_007 4 dic. 2019 a las 04:48