Gson: перебрать результат из Json - PullRequest
1 голос
/ 07 июня 2011

Язык: Java и Gson

Проанализировав массив JSON, как мне:

1) Распечатать все его содержимое

2) Перебрать его содержимое?

Например, вот мой код:

String JSInput = "//Json String";
Type listType = new TypeToken<TabClass[]>() {}.getType();
Input_String =GsonObject.fromJson(JSInput, listType);
System.out.println(Input_String.toString());

И соответствующее описание класса:

class TabClass{
String Name;
String Parent;
public String getName() {
    return Name;
}
public String getParent() {
    return Parent;
}
public void setName(String Name) {
    this.Name = Name;
}
public void setParent(String Parent) {
    this.Parent = Parent;
}

}

Приведенный выше код возвращает толькоописание объекта вместе с его местоположением в памяти:

[Lcom.example.projectname.TabClass;@1fbfd6

Как распечатать содержимое результирующего объекта или выполнить итерацию по нему?

1 Ответ

3 голосов
/ 08 июня 2011

Нет необходимости создавать TypeToken только для массива.Gson будет десериализовать в тип массива просто отлично.

Если у вас есть массив, вам не нужно явно перебирать его содержимое только для печати.Вы можете использовать один из методов Arrays.toString().

Вот пример.

// output:
// [{value1=one, value2=1}, {value1=two, value2=2}, {value1=three, value2=3}]

import java.util.Arrays;

import com.google.gson.Gson;

public class Foo
{
  public static void main(String[] args)
  {
    Gson GsonObject = new Gson();

    String JSInput = "[{\"value1\":\"one\",\"value2\":1},{\"value1\":\"two\",\"value2\":2},{\"value1\":\"three\",\"value2\":3}]";
    TabClass[] Input_String = GsonObject.fromJson(JSInput, TabClass[].class);
    System.out.println(Arrays.toString(Input_String));
  }
}

class TabClass
{
  private String value1;
  private int value2;

  @Override
  public String toString()
  {
    return String.format(
        "{value1=%s, value2=%d}",
        value1, value2);
  }
}

В противном случае, если вы предпочитаете явно выполнять итерацию по всем компонентам массива, с Java у вас естьнесколько вариантов того, как это сделать.Простым является использование конструкции цикла for-each.

for (TabClass tab : Input_String)
{
  System.out.println(tab);
}

(Кстати, «Input_String» не является хорошим именем для этого массива TabClass. Более описательное имя может быть «»вкладки».)

...