Введение переменных в Gson - PullRequest
0 голосов
/ 27 марта 2012

У меня есть большой JSON-файл, в котором содержится ОЧЕНЬ много похожего кода.Это похоже на это:

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

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

Чтобы получить доступ к каждому tN Я использую следующие строки:

       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 Ответ

1 голос
/ 27 марта 2012

Все зависит только от вашего воображения; -)

Я выйду из этого фрагмента 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());
}
...