gson解析json数据分析

来源:互联网 发布:mac mini 老款拆机 编辑:程序博客网 时间:2024/05/21 14:05

              GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用。如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的libs目录下添加这个文件即可;如果是在Java项目中,则把gson-2.2.4.jar先添加到当前项目的任意一个包中,然后右键点击这个jar包 -> 构建路径 -> 添加至构建路径。这样准备工作就做好了。


1.工具类

/****封装Json解析工具类,提供范型参数*/
class GsonUtil{

  //将json数据 解析成相应的映射对象

       public static <T> T parseJsonWithGson(String jsonData,Class<T> type){

    Gson gson = new Gson();

    T result = gson.fromJson(jsonData,type);

    return result;

       }

  //将Json数组解析成相应的映射对列表

public static <T> List<T> parseJsonArrayWithGson(String jsonData, Class<T> type){

         Gson gson = new Gson();

         List<T> result = gson.fromJson(jsonData,new TypeToken<List<T>>().{}.getType() );

         return result ;

          }

}

    (1)单条无嵌套Json数据的解析

  eg:{“name”:“jz”,"age":20}

1.定义数据结构类:

   public class Person {

        private String name ;

        private String age;

       //提供变量的set和get方法

}

 2. 创建Gson对象并解析:

1 String jsonData = "{\"name\":\"John\", \"age\":20}";  //注:这里也可以不使用转义字符,而用单引号:String jsonData = "{'name':'John', 'age':20}";2 Gson gson = new Gson();3 Person person = gson.fromJson(jsonData,Person.class);

 String jsonData = "{'name':'John', 'age':20}"; Person person = GsonUtil.parseJsonWithGson(jsonData, Person.class);


(2)单条有嵌套的Json数据解析

eg:{"name":"John", "age":20,"grade":{"course":"English","score":100,"level":"A"}}

1、定义Student类:

复制代码
 1 class Student { 2     private String name; 3     private String age; 4  5     private Grade grade; 6  7     public class Grade { // 内部类要定义成public的 8         private String course; 9         private String score;10         private String level;11 12         public String getCourse() {13             return course;14         }15 16         public void setCourse(String course) {17             this.course = course;18         }19 20         public String getScore() {21             return score;22         }23 24         public void setScore(String score) {25             this.score = score;26         }27 28         public String getLevel() {29             return level;30         }31 32         public void setLevel(String level) {33             this.level = level;34         }35 36         // 重写toString方法37         @Override38         public String toString() {39             return "Grade:[course = " + course + ", score = " + score40                     + ", level = " + level + "]";41         }42     }43 44     // 重写toString方法45     @Override46     public String toString() {47         return "Student:[name = " + name + ", age = " + age + ", grade = "48                 + grade + "]";49     }50 }
            String jsonData = "{'name':'John', 'age':20,'grade':{'course':'English','score':100,'level':'A'}}";        Student student = GsonUtil.parseJsonWithGson(jsonData, Student.class);
(三) 解析Json数组(多条Json数据)

例如: [{'name':'John', 'grade':[{'course':'English','score':100},{'course':'Math','score':78}]}, {'name':'Tom', 'grade':[{'course':'English','score':86},{'course':'Math','score':90}]}]   //注:Json数组最外层一定要加"[]"

 String jsonData = "[{'name':'John', 'grade':[{'course':'English','score':100},{'course':'Math','score':78}]},{'name':'Tom', 'grade':[{'course':'English','score':86},{'course':'Math','score':90}]}]";         List<Student> students = GsonUtil.parseJsonArrayWithGson(jsonData,                 Student.class);
2 class Student {43     private String name;44     private List<Grade> grade; // 因为grade是个数组,所以要定义成List45 46     public class Grade {47         private String course;48         private String score;49 50         public String getCourse() {51             return course;52         }53 54         public void setCourse(String course) {55             this.course = course;56         }57 58         public String getScore() {59             return score;60         }61 62         public void setScore(String score) {63             this.score = score;64         }65 66     }67 68     public String getName() {69         return name;70     }71 72     public void setName(String name) {73         this.name = name;74     }75 76     public List<Grade> getGrade() {77         return grade;78     }79 80     public void setGrade(List<Grade> grade) {81         this.grade = grade;82     }83 }如果数据结构这样子:(很重要)
  1. [{"title":"qq","aipPath":"/jeesite/2016/09/1474182626803_nbspd.aip","delFlag":"0","id":"7ef6815938394fce88a5873312b661e4","isNewRecord":false}] 
用下面这个:
  1. public static <T> List<T> getObjectList(String jsonString,Class<T> cls){  
  2.         List<T> list = new ArrayList<T>();  
  3.         try {  
  4.             Gson gson = new Gson();  
  5.             JsonArray arry = new JsonParser().parse(jsonString).getAsJsonArray();  
  6.             for (JsonElement jsonElement : arry) {  
  7.                 list.add(gson.fromJson(jsonElement, cls));  
  8.             }  
  9.         } catch (Exception e) {  
  10.             e.printStackTrace();  
  11.         }  
  12.         return list;  
  13.     }
觉得有用请大家点赞哦

借鉴:http://www.cnblogs.com/jiayongji/p/5297187.html

  http://www.cnblogs.com/jianyungsun/p/6647203.html