使用gson反序列化javabeans对象

时间:2012-01-05 13:58:21

标签: android gson

我正在尝试此代码,但无法正常工作

    public class Main {
    public static void main(String[] args) { list();}

    private static void list() {

        Gson gson = new Gson();     
        String result = "[{\"Person\":{\"id\":\"1\",\"name\":\"Prédio I\"}},{\"Person\":{\"id\":\"2\",\"name\":\"Prédio II\"}}]";
        Person[] persons = gson.fromJson(result, Person[].class);
        System.out.println("Qtde: " + persons.length);
        for (Person pe : persons) {
            System.out.println("Name: " + pe.getName());
        }
    }

}

看到这段代码需要一个人数组,但不能正常工作,应该向我展示javabens对象

1 个答案:

答案 0 :(得分:0)

我猜测问题在于将JSON结构正确绑定到匹配的Java数据结构。请注意,JSON数组中的每个组件都是一个具有单个属性的对象,名为“Person”,它是一个具有两个属性的对象,名为“id”和“name” - JSON数组中的每个组件都不简单Person对象,但是一个Person包装器对象。

以下演示了如何将JSON绑定到匹配的Java数据结构。

import com.google.gson.Gson;

public class GsonFoo
{
  public static void main(String[] args)
  {
    // [{"Person":{"id":"1","name":"Prédio I"}},{"Person":{"id":"2","name":"Prédio II"}}]
    String jsonInput = "[{\"Person\":{\"id\":\"1\",\"name\":\"Prédio I\"}},{\"Person\":{\"id\":\"2\",\"name\":\"Prédio II\"}}]";

    PersonWrapper[] persons = new Gson().fromJson(jsonInput, PersonWrapper[].class);
    System.out.println("Qtde: " + persons.length);
    for (PersonWrapper pw : persons)
    {
      System.out.println("Name: " + pw.Person.name);
    }

    // output:
    // Qtde: 2
    // Name: Prédio I
    // Name: Prédio II
  }
}

class PersonWrapper
{
  Person Person;
}

class Person
{
  int id;
  String name;
}