Java-json系列(一):用GSON解析Json格式数据
GSON是谷歌提供的开源库,用来解析Json格式的数据,非常好用。如果要使用GSON的话,则要先下载gson-2.2.4.jar这个文件,如果是在Android项目中使用,则在Android项目的libs目录下添加这个文件即可;如果是在Java项目中,则把gson-2.2.4.jar先添加到当前项目的任意一个包中,然后右键点击这个jar包 -> 构建路径 -> 添加至构建路径。这样准备工作就做好了。
(一)单条无嵌套Json数据的解析
比如有如下Json数据:{"name":"John", "age":20} //也可以用单引号,写成:{'name':'John', 'age':20}
解析该数据步骤如下:
1、定义Person类:
1 public class Person{ 2 3 private String name; //属性都定义成String类型,并且属性名要和Json数据中的键值对的键名完全一样 4 5 private String age; 6 7 ...//提供所有属性的getter和setter方法 8 9 }
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);
3、然后使用Person对象的getter方法就可以获取到数据了。
4、扩展:考虑到Json数据的不同,那么解析Json的时候所用的类也可能不同,比如这里用的是Person,如果解析其他数据可能用的又是Dog、Cat...所以考虑将用GSON解析的步骤封装,并提供泛型参数,示例程序如下:
1 import com.google.gson.Gson; 2 3 /** 4 * 用GSON解析单条Json数据 5 * 6 */ 7 public class GsonTest1 { 8 public static void main(String[] args) { 9 String jsonData = "{'name':'John', 'age':20}"; 10 Person person = GsonUtil.parseJsonWithGson(jsonData, Person.class); 11 System.out.println(person.getName() + "," + person.getAge()); 12 } 13 } 14 15 /* 16 * 封装的GSON解析工具类,提供泛型参数 17 */ 18 class GsonUtil { 19 //将Json数据解析成相应的映射对象 20 public static <T> T parseJsonWithGson(String jsonData, Class<T> type) { 21 Gson gson = new Gson(); 22 T result = gson.fromJson(jsonData, type); 23 return result; 24 } 25 26 } 27 28 class Person { 29 private String name; 30 private String age; 31 32 public String getName() { 33 return name; 34 } 35 36 public void setName(String name) { 37 this.name = name; 38 } 39 40 public String getAge() { 41 return age; 42 } 43 44 public void setAge(String age) { 45 this.age = age; 46 } 47 48 }
输出结果:
John,20
(二)单条有嵌套的Json数据解析
比如有如下Json数据:{"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 }
2、使用(一)中封装的GsonUtil工具类进行解析:
1 public class GsonTest1 { 2 public static void main(String[] args) { 3 String jsonData = "{'name':'John', 'age':20,'grade':{'course':'English','score':100,'level':'A'}}"; 4 Student student = GsonUtil.parseJsonWithGson(jsonData, Student.class); 5 System.out.println(student); 6 } 7 } 8 9 /* 10 * 封装的GSON解析工具类,提供泛型参数 11 */ 12 class GsonUtil { 13 // 将Json数据解析成相应的映射对象 14 public static <T> T parseJsonWithGson(String jsonData, Class<T> type) { 15 Gson gson = new Gson(); 16 T result = gson.fromJson(jsonData, type); 17 return result; 18 } 19 20 }
输出结果:
Student:[name = John, age = 20, grade = Grade:[course = English, score = 100, level = A]]
(三)解析Json数组(多条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数组最外层一定要加"[]"
如何处理这样的数据呢?就要用到List。步骤如下:
示例程序如下:
1 import java.lang.reflect.Type; 2 import java.util.List; 3 4 import com.google.gson.Gson; 5 import com.google.gson.reflect.TypeToken; 6 7 /** 8 * 用GSON解析Json数组 9 */ 10 public class GsonTest { 11 public static void main(String[] args) { 12 // Json数组最外层要加"[]" 13 String jsonData = "[{'name':'John', 'grade':[{'course':'English','score':100},{'course':'Math','score':78}]},{'name':'Tom', 'grade':[{'course':'English','score':86},{'course':'Math','score':90}]}]"; 14 15 List<Student> students = GsonUtil.parseJsonArrayWithGson(jsonData, 16 Student.class); 17 System.out.println(students); 18 } 19 } 20 21 /* 22 * 封装的GSON解析工具类,提供泛型参数 23 */ 24 class GsonUtil { 25 // 将Json数据解析成相应的映射对象 26 public static <T> T parseJsonWithGson(String jsonData, Class<T> type) { 27 Gson gson = new Gson(); 28 T result = gson.fromJson(jsonData, type); 29 return result; 30 } 31 32 // 将Json数组解析成相应的映射对象列表 33 public static <T> List<T> parseJsonArrayWithGson(String jsonData, 34 Class<T> type) { 35 Gson gson = new Gson(); 36 List<T> result = gson.fromJson(jsonData, new TypeToken<List<T>>() { 37 }.getType()); 38 return result; 39 } 40 } 41 42 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 }
输出结果:
[{name=John, grade=[{course=English, score=100.0}, {course=Math, score=78.0}]}, {name=Tom, grade=[{course=English, score=86.0}, {course=Math, score=90.0}]}]
Java-json系列(一):用GSON解析Json格式数据相关推荐
- 软件测试开发实战| Java版本,Gson解析json比较常用的2种方式
软件测试开发基础中,关于json的解析是比较常见的,作为软件测试人员,json的基础需要掌握.这篇文章介绍Gson解析json比较常用的有2种方式,如下. Gson解析json比较常用的有2种方式: ...
- JSONObject 和 GSON 解析 JSON 数据详解(转)
转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数 ...
- Android之GSON解析JSON
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库. 比如: <pre name="code" class=" ...
- GSON解析JSON保存到数据库
今天给大家带来的文章为通过Gson解析json数据并快速保存至数据库的文章.我们要保存是json对象数组,本文中的json数组并非从后台获取,为了演示,直接手动构造. 需要保存到数据库的是手机的品牌和 ...
- 使用Gson解析Json为Map对象探索(上)
使用Gson解析Json为Map对象探索(上) 有些时候由于后台业务系统的不一样导致一个Json的list对象装的并非是同一种类型的对象,导致无法建立比较好的Java模型,而刚好可以利用map对象的通 ...
- Android--------使用gson解析json文件
##使用gson解析json文件 **json的格式有两种:** **1. {}类型,及数据用{}包含:** **2. []类型,即数据用[]包含:** 下面用个例子,简单的介绍gson如何解析jso ...
- Android利用Gson解析Json数据
其实,要创建和解析JSON数据,也可以使用GSON来完成.GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库.使用GSON,可以很容易的将一串JSON数据转换为一个 ...
- gson解析php,php,android_关于 Gson 解析JSON数据。。。,php,android - phpStudy
关于 Gson 解析JSON数据... 1.首先,我是从服务器端传回来的JSON数据如下: {"info":"succeed","user_id&qu ...
- 使用Gson解析Json为Map对象探索(下)
使用Gson解析Json为Map对象探索(下) 下面来说说其中出现的问题 1.如何获取一个list列表 1.1首先是数据格式 1.2处理成列表的代码 com.google.gson.Gson gson ...
最新文章
- oracle查询表中的某一行,oracle查看所有表及各表行数?
- centos 安装VSFTP
- 对E—R模型的深入理解
- 小智机器人江苏赞_智能机器人小智
- Linux下进程间通信概述
- 过滤html标签的代码
- dockerclient 查看端口占用_docker 端口被占用问题解决
- 线程池拒绝策略 开发中常用什么策略_面试官:说说你知道多少种线程池拒绝策略...
- RedisTemplate常用集合使用说明-opsForSet(五)
- SpringMVC中注解@RequestBody和@ResponseBody的使用区别
- JAVA 并发编程实践 - 原子变量与非阻塞同步机制 笔记
- SaaS架构设计之共享设备
- hadoop hive窗口函数求和
- 依码仕喷码机编程指南
- 数字通信系统误码性能仿真分析
- JAVA基础知识点大全之一
- 虚拟机安装win7时遇到的问题及解决方案
- Linux互信及互信失效问题
- net.sf.json.JSONObject实现Object对象与Json字符串的互转
- Kafka(四)- Kafka 生产者