2012-03-27 13 views
0

Ich habe eine große JSON-Datei, die viel ähnlichen Code enthält. Es ist ähnlich wie folgt aus:Einführung von Variablen in Gson

...,"techs":{"t1":{"level":24,"able":true},"t2":{"level":23,"able":true},"t3":{"level":20,"able":true},"t4"...,"t5"... 

Es hat seit t1 bis t510 ... Aus diesem Grund habe ich eine Aktivität für jede tN zu schaffen, so dass ich zu 510 Aktivitäten erstellen! 0.0

Um Zugang zu jedem tN ich die folgenden Zeilen verwenden zu erhalten:

 Gson gson = new Gson(); 
     Planets json = gson.fromJson(str, Planets.class); 

     System.out.println(json.techs.t1.level); 
     System.out.println(json.techs.t2.level); 
         etc... 

So wissen Ich will, wenn es die Möglichkeit gibt t1 für eine Variable zu ändern, so dass ich nur ändern müssen die Variable für den Zugriff auf t2 in einer einzigen Aktivität.

Zum Beispiel: String tech = t456; System.out.println(json.techs.tech.level);

Vielen Dank im Voraus sehr viel!

Antwort

1

Es ist alles nur über Ihre Phantasie ;-)

ich von diesem JSON herauskommen wird Snippet

"techs":{"t1":{"level":24,"able":true},"t2":{"level":23,"able":true},"t3":{"level":20,"able":true}} 

Dies als dieser Struktur

HashMap<String, InnerObject> 

wo InnerObject leicht darstellbare Klasse ist wie folgt definiert:

class InnerObject { 
    int level; 
    boolean able; 
} 

alles, was man so braucht, ist Klasse, wo Einfeld techs und es wird so genannt wird definiert werden:

class JSONWrapper { 
    // another variables 
    HashMap<String, InnerObject> techs; 
} 

Felder zuzugreifen, nachdem können Sie verwenden:

String techId = "t546"; 
InnerObject = JSONWrapperInstance.techs.get(techId); 

Ganzer Code:

String str = "... contains JSON string ..."; 
JSONWrapper JSONWrapperInstance = new Gson().fromJson(str, JSONWrapper.class); 

Und Sie können durch alle Artikel gehen s in HashMap gefällt das:

Iterator<String> iterator = JSONWrapperInstance.techs.keySet().iterator(); 
while(iterator.hasNext()){ 
    InnerObject = JSONWrapperInstance.techs.get(iterator.next()); 
} 
+0

Wow! Vielen Dank für Ihre ausgezeichnete Antwort! Morgen früh werde ich das ausprobieren! Es scheint, dass es ohne Probleme funktioniert. Morgen werde ich deine Antwort abstimmen. Vielen Dank! –

+1

Ich versuche auf die Daten zuzugreifen, aber das Protokoll zeigt: [email protected] Zumindest wirft es keinen Fehler! EDITED: Fix es! Ich musste nur den Typ von InnerObject in int ändern! Vielen Dank! Es wirkt wie ein Zauber! : D –

+0

Ich habe Probleme ... Ich bekomme immer NullPointerException! Galax galax = new Gson() aus Johnson (strGalaxy, Galax.class); double er = galax.pos.get ("p2") .Schutt.Titanium; strGalaxy ist in Ordnung, und die Klassen sind in Ordnung, ich denke, alles ist in Ordnung ...Öffentliche Klasse Galax { \t \t Öffentliche HashMap pos; } öffentliche Klasse InnerObject { \t öffentliche Debris Rückstand; \t } public class Debris { \t \t public double Titan; } JSON-Schnipsel: {"p1": {"Trümmer": {"Titan": 0, "Silizium": 0}}, "p2": {"Trümmer": {"Titan": 0, "Silizium": 0}} –