Android解析json数据使用gson

xiaoxiao2021-02-28  61

发现了 google 的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson。  经过比较,gson和 其他 现有 java  json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。  下面是一个简单的例子:  Java代码   1. public   class  Person {    2.   3.     private  String name;    4.    private int age;    5.   6.    /**   7.     * @ return  the name   8.     */   9.    public String getName() {    10.        return name;    11.    }    12.   13.    /**   14.     * @param name the name to set   15.     */   16.    public  void  setName(String name) {    17.        this.name = name;    18.    }    19.   20.    /**   21.     * @return the age   22.     */   23.    public int getAge() {    24.        return age;    25.    }    26.   27.    /**   28.     * @param age the age to set   29.     */   30.    public void setAge(int age) {    31.        this.age = age;    32.    }    33.        34.    @Override   35.    public String toString()    36.    {    37.        return name + ":" +age;    38.    }    39.}   public class Person {     private String name;     private int age;     /**      * @return the name      */     public String getName() {         return name;     }     /**      * @param name the name to set      */     public void setName(String name) {         this.name = name;     }     /**      * @return the age      */     public int getAge() {         return age;     }     /**      * @param age the age to set      */     public void setAge(int age) {         this.age = age;     }          @Override     public String toString()     {         return name + ":" +age;     } } 实体很简单,两个字段,当然实体中的字段也可以是List或者Set类型的。  Java代码   1.Gson gson = new Gson();    2.List<Person> persons = new ArrayList<Person>();    3.for (int i = 0; i < 10; i++) {    4.     Person p = new Person();    5.     p.setName("name" + i);    6.     p.setAge(i * 5);    7.     persons.add(p);    8.}    9.String str = gson.toJson(persons);   Gson gson = new Gson(); List<Person> persons = new ArrayList<Person>(); for (int i = 0; i < 10; i++) {      Person p = new Person();      p.setName("name" + i);      p.setAge(i * 5);      persons.add(p); } String str = gson.toJson(persons); 上面的代码重点是Gson对象,它提供了toJason()方法将对象转换成Json 字符串 ,上面代码的str对象值为:  [{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10},{"name":"name3","age":15},{"name":"name4","age":20},{"name":"name5","age":25},{"name":"name6","age":30},{"name":"name7","age":35},{"name":"name8","age":40},{"name":"name9","age":45}]  很标准的json 数据 ,很简单吧,呵呵。  下面来看看gson的反序列化,Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。  在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构。  先来看第一种:  比如json字符串为:[{"name":"name0","age":0}]  代码:  Java代码   1.Person person = gson.fromJson(str, Person.class);   Person person = gson.fromJson(str, Person.class); 提供两个参数,分别是json字符串以及需要转换对象的类型。  第二种,转换成列表类型:  代码:  Java代码   1.List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType());    2.for(int i = 0; i < ps.size() ; i++)    3.{    4.     Person p = ps.get(i);    5.     System.out.println(p.toString());    6.}   List<Person> ps = gson.fromJson(str, new TypeToken<List<Person>>(){}.getType()); for(int i = 0; i < ps.size() ; i++) {      Person p = ps.get(i);      System.out.println(p.toString()); } 可以看到上面的代码使用了TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。  Gson的基本使用就是这么多,至于annotation方面可以参考gson的官方文档,希望能对初学java和gson的同学有所帮助。
转载请注明原文地址: https://www.6miu.com/read-41950.html

最新回复(0)