GSON使用笔记

GSON简介#

GSON是Google开发的Java API,用于转换Java对象和Json对象,我在这里将记录一下GSON的简单使用

下载GSON#

我们可以在其github仓库中下载,也可以使用Maven下载

Copy
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.1</version> </dependency>

将JavaBean转换为JSON数据#

我们最常用的就是使用JavaBean来封装数据,所以使用JavaBean生成JSON的方法较为重要.在这里先创建一个JavaBean:

Copy
public class User { private Integer id; private String userName; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }

基础用法#

接下来我们就开始写测试代码(分三步):
1.封装JavaBean数据
2.new一个GSON对象
3.使用toJson方法生成JSON数据

Copy
@Test public void fun1(){ User user=new User(); user.setId(1); user.setUserName("lz"); user.setPassword("123"); Gson gson=new Gson(); String json = gson.toJson(user); System.out.println(json); }

显示的JSON数据为:

Copy
{"id":1,"userName":"lz","password":"123"}

格式化与自定义数据样式#

如果我们想将id变成大写的ID,可以在JavaBean中的id属性上添加SerializedName注解:

这时生成的JSON数据就是:

Copy
{"ID":1,"userName":"lz","password":"123"}

GSON对象也可以使用GsonBuilder类创建出来:

Copy
GsonBuilder builder=new GsonBuilder(); Gson gson=builder.create();

使用GsonBuilder类可以进行更多的对生成的JSON数据的操作,比如说:格式化JSON:

Copy
GsonBuilder builder=new GsonBuilder(); builder.setPrettyPrinting(); Gson gson=builder.create();

使用Builder类的setPrettyPrinting()方法就可以做到

Copy
{ "ID": 1, "userName": "lz", "password": "123" }

同样我们使用setFieldNamingStrategy()方法也可以起到相同作用

Copy
@Test public void fun1(){ User user=new User(); user.setId(1); user.setUserName("lz"); user.setPassword("123"); GsonBuilder builder=new GsonBuilder(); builder.setPrettyPrinting(); builder.setFieldNamingStrategy(new FieldNamingStrategy() { @Override public String translateName(Field arg0) { if(arg0.getName().equals("id")){ return "ID"; } return arg0.getName(); } }); Gson gson=builder.create(); String json = gson.toJson(user); System.out.println(json); }

处理部分属性#

如果我们希望单独处理某些属性来生成JSON数据,可以有以下方法:
1.设置忽略值为null

Copy
Gson gson=builder.serializeNulls().create();

这样在我们没有设置属性的值的时候,会显示null

Copy
{"ID":1,"userName":"lz","password":null}

2.在JavaBean中的属性使用Java关键字transient

这样在生成的JSON数据中就会忽略该值

Copy
{"ID":1,"userName":"lz"}

password值被忽略
3.当然也可以在Java代码中忽略某属性

Copy
GsonBuilder builder=new GsonBuilder(); Gson gson=builder.setExclusionStrategies(new ExclusionStrategy() { @Override public boolean shouldSkipField(FieldAttributes arg0) { if(arg0.getName().equals("password")){ return true; } return false; } @Override public boolean shouldSkipClass(Class<?> arg0) { // TODO Auto-generated method stub return false; } }).create(); String json = gson.toJson(user);

使用setExclusionStrategies()方法并重写shouldSkipField()方法就可以将password属性给过滤掉
4.格式化日期类型
我们先在JavaBean中添加一个Date类型的birthday属性,然后使用Builder类的setDateFormat方法可以格式化日期

Copy
Gson gson=builder.setDateFormat("yyyy-MM-dd HH:mm:ss").create();

JSON数据为:

Copy
{"ID":1,"userName":"lz","birthday":"2017-07-29 13:50:22"}

解析JSON数据#

前面写的都是将数据生成JSON格式,下面我们反其道而行,解析一段JSON数据,并将数据封装到JavaBean中。
JSON数据:

Copy
{ "userName":"lz", "password":"321", "birthday":"2017-07-29 13:50:22" }

使用的GSON对象的fromJson方法

Copy
@Test public void fun2() throws Exception{ String path = MyTest.class.getResource("/test.json").getFile(); File file=new File(path); String json = FileUtils.readFileToString(file); Gson gson=new Gson(); User user = gson.fromJson(json, User.class); System.out.println(user); }

我们打印user对象:

Copy
User [id=null, userName=lz, password=321, birthday=Sat Jul 29 13:50:22 CST 2017]

我们在解析时间的时候同样也可以格式化时间格式,使用的还是上面我们用过的setDateFormat方法(注意:在这里GSON对象的创建就需要通过GsonBuilder类来create出来)

Copy
GsonBuilder builder=new GsonBuilder(); Gson gson=builder.setDateFormat("yyyy-MM-dd HH:mm:ss").create(); User user = gson.fromJson(json, User.class); System.out.println(user.getBirthday().toLocaleString());

结果为:

Copy
2017-7-29 13:50:22

可以知道时间已经被格式化了
最后还值得说的一点是如果我们在JavaBean中使用集合,GSON会将JOSN数据中对应的数组类型自动解析为具体的集合类型,不用我们再进行处理

Copy
{ "userName":"lz", "password":"321", "birthday":"2017-07-29 13:50:22", "jineng":[ "Struts2","springMVC" ] }

Copy
@Test public void fun3() throws Exception{ String path = MyTest.class.getResource("/test.json").getFile(); File file=new File(path); String json = FileUtils.readFileToString(file); Gson gson=new Gson(); User user = gson.fromJson(json, User.class); System.out.println(user); System.out.println(user.getJineng()); System.out.println(user.getJineng().getClass()); }

打印结果为:

Copy
User [id=null, userName=lz, password=321, birthday=Sat Jul 29 13:50:22 CST 2017, jineng=[Struts2, springMVC]] [Struts2, springMVC] class java.util.ArrayList

可以看到在JavaBean中我们只是使用List接口,而GSON可以帮助我们选择具体的类型来封装集合

posted @   OverZeal  阅读(354)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
阅读排行:
· DeepSeek V3 两周使用总结
· 回顾我的软件开发经历(1)
· C#使用yield关键字提升迭代性能与效率
· 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解
· 4. 使用sql查询excel内容
点击右上角即可分享
微信分享提示

目录

目录

X