2012-03-27 3 views
0

У меня есть большой JSON-файл, содержащий много похожих кодов. Это похоже на это:Представляем переменные Gson

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

С тех пор t1 до t510 ... По этой причине, я должен создать действие для каждого Т.Н., так что я должен создать 510 мероприятий! 0,0

Чтобы получить доступ ко каждому Т.Н. я использую следующие строки:

 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... 

Так что я хочу знать, если есть возможность изменить t1 для переменного, так что у меня есть только изменения переменная для доступа t2 в одном действии.

Например: String tech = t456; System.out.println(json.techs.tech.level);

Большое спасибо заранее!

ответ

1

Это всего лишь о своем воображении ;-)

Я выйдет из этого JSON фрагмент кода

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

Это легко представима в этой структуре

HashMap<String, InnerObject> 

InnerObject где класс определяется следующим образом:

class InnerObject { 
    int level; 
    boolean able; 
} 

Так все, что вам нужно, это класс, где одно поле будет называться techs и она будет определена следующим образом:

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

Для доступа к полям после этого, вы можете использовать:

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

Весь код:

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

И вы можете пройти через весь пункт с в HashMap примерно:

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

Ничего себе! Спасибо за отличный ответ! Завтра утром я попробую! Кажется, что он будет работать без проблем. Завтра я проголосую за ваш ответ. Спасибо! –

+1

Я пытаюсь получить данные, но показывает журналы: [email protected] По крайней мере, это не ошибка! EDITED: исправить! Мне просто пришлось изменить тип InnerObject на int! Большое спасибо! Отлично работает! : D –

+0

У меня проблемы ... Я всегда получаю исключение NullPointerException! Galax galax = новый Gson(). FromJson (strGalaxy, Galax.class); double er = galax.pos.get ("p2"). debris.titanium; strGalaxy в порядке, и классы тоже в порядке, я думаю, все правильно ...открытый класс Galax { \t \t общедоступный HashMap pos; } открытый класс InnerObject { \t общественный обломки мусора; \t} общественного класс мусора { \t \t общественных двойной титан; } JSON snippet: {"p1": {"debris": {"titanium": 0, "silicum": 0}}, "p2": {"debris": {"titanium": 0, "silicum": 0}} –