2016-11-14 7 views
0

Ich versuche, Json-Arraylist (Kinder) in Java mit GSON und einer for-Schleife zu analysieren. Aber ich erhalte den folgenden Fehler:JSONArray-Array = neues JSONArray (string_of_json_array);

for each not applicable to expression type 
required:array or java.lang.iterable 
found:String 

Hier ist die Haupt-Java-Klasse, die diesen Fehler zeigt

try { 
    br = new BufferedReader(new FileReader("user.json")); 
    Tree result = gson.fromJson(br, Tree.class); 

    if (result !=null){ 
     for (User t : result.getCategory()){ //ERROR IS HERE (squiggly red line) 
     System.out.println(t.getId() + "-" + t.getName() + "-" + t.getCategory() + "-" + t.getPercentage()); //ERROR IS ALSO HERE FOR EACH VARIABLES 
    } 
    } 


} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} finally { 
    if (br != null){ 

     try { 
      br.close(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 

    } 

Dies ist der Baum Klasse:

private String category; 
@SerializedName("children") 
@Expose 
private List<Child> children = new ArrayList<Child>(); 

public String getCategory() { 
return category; 
} 

public void setCategory(String category) { 
this.category = category; 
} 

public List<Child> getChildren() { 
return children; 
} 

public void setChildren(List<Child> children) { 
this.children = children; 
} 

Benutzerklasse:

private String id; 
@SerializedName("processed_lang") 
@Expose 
private String processedLang; 
@SerializedName("source") 
@Expose 
private String source; 
@SerializedName("tree") 
@Expose 
private Tree tree; 

public String getId() { 
return id; 
} 

public void setId(String id) { 
this.id = id; 
} 

public String getProcessedLang() { 
return processedLang; 
} 

public void setProcessedLang(String processedLang) { 
this.processedLang = processedLang; 
} 

public String getSource() { 
return source; 
} 

public void setSource(String source) { 
this.source = source; 
} 

public Tree getTree() { 
return tree; 
} 

public void setTree(Tree tree) { 
this.tree = tree; 
} 
    String getName() { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

Kann mir jemand sagen, wo ich falsch gelaufen bin und wenn ihr den JSON-Code sehen wollt, lasst es mich wissen, ich werde es auch platzieren und der Grund warum ich es nicht platzierte ist, weil es sehr lang ist. Wie kann ich das Array bekommen? Kinder auflisten? Vielen Dank für Ihre Zeit.

+3

'getCategory' sendet einen String zurück, aber Sie versuchen, über es in Ihrem' for' Schleife zu durchlaufen. Was versuchst du hier zu erreichen? – Zircon

+0

Leider habe ich vergessen zu erwähnen, dass .. Ich versuche, die Arraylist Children anzuzeigen. –

Antwort

0

Um For-Each Schleife im Java-Objekt zu verwenden, das iteriert werden soll, muss Iterable<T> Schnittstelle implementiert werden.

iterieren durch children (wie Sie im Kommentar erwähnt) verwenden nur:

for (Child child : result.getChildren()){    
    System.out.println(child); 
} 

List<T> implementiert Iterable Schnittstelle, so dass Sie foreach-Schleife mit es verwenden können.

Lesen Sie mehr: The For-Each Loop, Iterable

+0

Vielen Dank für Ihre Antwort, aber gibt es eine Möglichkeit, die Arraylist aus der Klasse Tree anzuzeigen? da werden wahrscheinlich alle Arrays angezeigt. Kind zeigt nur eine Arraylist. –

+1

@ArdiAbdul Entschuldigung, ich kann den Punkt nicht verstehen. Was möchtest du haben? –