gson解析json数据分析

本文介绍了如何使用Gson库在Java项目中解析JSON数据。首先,需要将gson-2.2.4.jar添加到项目构建路径中。Gson提供了两个关键方法,`parseJsonWithGson`用于将JSON字符串转换为指定类型的对象,`parseJsonArrayWithGson`则用于转换JSON数组。通过创建数据结构类和调用Gson对象的方法,可以轻松解析无嵌套和有嵌套的JSON数据。同时,还提供了一个方法`getObjectList`来解析包含多个对象的JSON数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

              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         @Override
38         public String toString() {
39             return "Grade:[course = " + course + ", score = " + score
40                     + ", level = " + level + "]";
41         }
42     }
43 
44     // 重写toString方法
45     @Override
46     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是个数组,所以要定义成List
45 
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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值