2017-01-29 4 views
0

Ich habe eine JSON-Antwort, die wie folgt aussieht:Looping durch verschachtelten JSON-Array, bekommen Kinder mit gleichem Objektmodell

[ 
    { 
     "id": 5, 
     "user_id": 1, 
     "message": "Hello", 
     "children": [ 
      { 
       "id": 7, 
       "user_id": 2, 
       "message": "Hi", 
       "children": [ 
        { 
         "id": 8, 
         "user_id": 3, 
         "message": "Hey", 
         "children": [ 

         ] 
        } 
       ] 
      } 
     ] 
    }, 
    { 
     "id": 6, 
     "user_id": 4, 
     "message": "Ahoy", 
     "children": [ 

     ] 
    } 
] 

Ich habe bereits das Modell erstellt (Message.java). Die Kinder können durch den Aufruf getChildren() abgerufen werden. Die Antwort wird in einer Liste List<Message> messages gespeichert.

Wie kann ich durch dieses JSON-Array durchlaufen, um den Inhalt jedes Kindes zu erhalten, bis kein Kind mehr übrig ist? Ist das ohne rekursive Funktion möglich?

+0

Ich bin immer noch ein bisschen verwirrt über das, was Sie tun möchten. Kannst du ein wenig ausarbeiten, was genau du mit diesem JSON probierst? und wie genau willst du es speichern? –

Antwort

1

Ich nehme Sie Liste Meldungen haben:

Hier ist, wie Sie durch alle Kinder sowohl mit Rekursion und iterative Weise durchsuchen können:

List<Message> messages = //you already have that 

System.out.println("Using Recusion : "); 

for (Message message : messages) { 
    printMessage(message); 
} 

System.out.println("Using Iterative : "); 

Stack<Message> stack = new Stack<>(); 
stack.addAll(messages); 

while (!stack.empty()) { 
    Message item = stack.pop(); 
    System.out.println(item.getId() + ":" + item.getUser_id() + ":" + item.getMessage()); 
    for (Message chidren : item.getChildren()) { 
     stack.push(chidren); 
    } 
} 

und hier wird die Printmessage-Methode:

public static void printMessage(Message pmessage) { 
    System.out.println(pmessage.getId() + ":" + pmessage.getUser_id() + ":" + pmessage.getMessage()); 
    for (Message message : pmessage.getChildren()) { 
     printMessage(message); 
    } 
}