Gson的入门使用

转载自  Gson的入门使用

Java对象和Json之间的互转,一般用的比较多的两个类库是Jackson和Gson,下面记录一下Gson的学习使用。

基础概念:

 Serialization:序列化,使Java对象到Json字符串的过程。

 Deserialization:反序列化,字符串转换成Java对象

使用Maven管理Gson,pom.xml导入gson的依赖

  <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.3.1</version></dependency>

Gson的两个基础方法

toJson();
fromJson();

 

Gson的创建方式一:直接new Gson对象

// 使用new方法
Gson gson = new Gson();// toJson 将bean对象转换为json字符串
String jsonStr = gson.toJson(user, User.class);// fromJson 将json字符串转为bean对象
Student user= gson.fromJson(jsonStr, User.class);// **序列化List**
String jsonStr2 = gson.toJson(list);// **反序列化成List时需要使用到TypeToken getType()**
List<User> retList = gson.fromJson(jsonStr2,new TypeToken<List<User>>(){}.getType());

 

Gson的创建方式二:使用GsonBuilder

使用new Gson(),此时会创建一个带有默认配置选项的Gson实例,如果不想使用默认配置,那么就可以使用GsonBuilder。

//serializeNulls()是GsonBuilder提供的一种配置,当字段值为空或null时,依然对该字段进行转换
Gson gson = new GsonBuilder().serializeNulls().create(); 

使用GsonBuilder创建Gson实例的步骤:

首先创建GsonBuilder,然后调用GsonBuilder提供的各种配置方法进行配置,

最后调用GsonBuilder的create方法,将基于当前的配置创建一个Gson实例。

 

GsonBuilder的一些配置

 Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation() //不对没有用@Expose注解的属性进行操作.enableComplexMapKeySerialization() //当Map的key为复杂对象时,需要开启该方法.serializeNulls() //当字段值为空或null时,依然对该字段进行转换.setDateFormat("yyyy-MM-dd HH:mm:ss:SSS") //时间转化为特定格式.setPrettyPrinting() //对结果进行格式化,增加换行.disableHtmlEscaping() //防止特殊字符出现乱码.registerTypeAdapter(User.class,new UserAdapter()) //为某特定对象设置固定的序列或反序列方式,自定义Adapter需实现JsonSerializer或者JsonDeserializer接口.create();

例如:Gosn对复杂Map的处理时需要用到其中的 enableComplexMapKeySerialization() 配置:

Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); //开启复杂处理Map方法
Map<List<User>, String> map = new HashMap<List<User>, String>();
// TODO 向map中添加数据
String jsonStr = gson.toJson(map);  //toJson
Map<List<User>, String> resultMap = gson.fromJson(jsonStr,new TypeToken<Map<List<User>, String>>() {}.getType()); //fromJson

注意:如果Map的key为String,则可以不使用GsonBuilder的enableComplexMapKeySerialization()方法,或者直接new Gson();

 

Gson的注解:

@Expose注解

public class User {@Exposeprivate String firstName;@Expose(serialize = false)private String lastName;@Expose(deserialize = false)private String emailAddress;private String password;
}

@Expose中serialize和deserialize属性是可选的,默认两个都为true。

如果serialize为true,调用toJson时会序列化该属性,

如果deserialize为true,调用fromJson生成Java对象时不会进行反序列化。

注意:如果采用new Gson()方式创建Gson,@Expose没有任何效果。需要使用

gsonBuilder.excludeFieldsWithoutExposeAnnotation() 方法。

@SerializedName注解    能指定该字段在序列化成json时的名称

  @SerializedName("w")private int width;

实际开发中我们会遇到比较复杂的Json,比如json中嵌套json数组,这个时候,就需要我们自定义序列化或反序列化方法了。

待续未完....

 

参考:

http://www.jianshu.com/p/fc5c9cdf3aab

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2017正式版离线安装及介绍

Visual Studio 2017 RTM正式版离线安装及介绍。 首先至官网下载&#xff1a;https://www.visualstudio.com/zh-hans/downloads/ VS 2017 正式版介绍&#xff1a; https://www.visualstudio.com/zh-hans/vs/whatsnew/ VS 2017 离线模式只离线.NET Core部分&#xff1a; Visual S…

ssm使用全注解实现增删改查案例——EmpMapperImpl

package org.dao.impl;import java.util.List;import org.dao.IEmpMapper; import org.entity.Emp; import org.springframework.beans.factory.annotation.Autowired;public class EmpMapperImpl implements IEmpMapper {//自动注入Autowiredprivate IEmpMapper empMapper;/*…

Linux下查找命令

转载自 Linux下查找命令 一.Linux查找文件的相关命令 常 用 命 令 简要中文说明 程序所在目录 more 分页显示一个文件或任何输出结果 /bin less 分页显示一个文件并且可以回头 /usr/bin whereis 寻找文件工具 /usr/bin find 寻找文件工具 /usr/bin locate 寻…

wadl2java cxf_java – CXF JAXRS |生成的wadl中不存在复杂响应类型

我们使用cxf 2.5.2和spring来暴露和消费宁静的服务.为了分发服务接口类,我们开始使用wadl2java目标(根据给定的wadl文件生成接口类)生成的wadl不包含正确的响应类型,因为我猜测,生成的接口都有’Response’作为返回类型.防爆.如果restful get方法返回’List’,则生成的wadl仅包…

Visual Studio 2017 新功能(上)

开发&#xff1a;快速导航、编写并修复代码 新的安装体验 - 降低了最小内存需求量以实现更快、更定制化的安装&#xff0c;并且支持脱机安装。 Visual Studio IDE - 大幅改进了 Visual Studio 2017&#xff0c;包括减少启动和解决方案加载时间、改进登录和标识、改进代码导航以…

2018蓝桥杯省赛---java---B---1(第几天)

题目描述 思路分析 31 29 31 30 4 125 答案 125

ssm使用全注解实现增删改查案例——Dept

package org.entity;import java.util.List; /*** * * 项目名称&#xff1a;test_myabtis_zhujie * 类名称&#xff1a;Dept * 类描述&#xff1a; 部门表的实体类 * 创建人&#xff1a;Mu Xiongxiong * 创建时间&#xff1a;2018-3-16 下午4:33:10 * 修改人…

mysql 数据库引擎

转载自 mysql 数据库引擎 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎&#xff0c;就必须重新编译MYSQL。在缺省情况下&#xff0c;MYSQL支持三个引擎&#xff1a;ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY&#xff0…

java 组件化_(原创)搭建一个组件化的监控平台

最近看到一位同事正在开发一个监控软件&#xff0c;要求就是通过针对服务器现有的一些接口&#xff0c;通过这些接口返回的数据进行分析&#xff0c;如果监控的值到达预先设定的范围则通过短信的方式发送给管理员。从整个开发的功能上来看是一个比较单一也很明确的功能&#xf…

微软发招,苹果发飙,React Native躺枪

这两天苹果和微软互怼&#xff0c;用脚本热更新的朋友要谨慎过 iOS 审核。 早上有Q群里面在讨论最近用 JavaScript 做为脚本层&#xff0c;在苹果商店审核遭拒的情况。 从目前多数信息来看&#xff0c;cocos2d-js 和 creator 这样用 SpiderMonkey JSB 技术栈的游戏情况尚好&am…

ssm使用全注解实现增删改查案例——Emp

package org.entity;import java.util.Date; /*** * * 项目名称&#xff1a;test_myabtis_zhujie * 类名称&#xff1a;Emp * 类描述&#xff1a; 员工信息表 * 创建人&#xff1a;Mu Xiongxiong * 创建时间&#xff1a;2018-3-16 下午4:34:02 * 修改人&…

2018蓝桥杯省赛---java---B---2(方格计数)

题目描述 思路分析 圆的对称性 代码实现 package com.atguigu.TEST;class Main{public static void main(String[] args) {int ans0;for (int i 1; i < 1000; i) {for (int j 1; j < 1000; j) {if(i*ij*j<1000*1000){ans;}}}System.out.println(ans*4);//向四边发…

MySQL 5.7 聚合(GROUP BY)功能描述

转载自 MySQL 5.7 聚合&#xff08;GROUP BY&#xff09;功能描述 12.19.1聚合&#xff08;GROUP BY&#xff09;功能描述 本节介绍对值集合进行操作的组&#xff08;聚合&#xff09;函数。 表12.25聚合&#xff08;GROUP BY&#xff09;函数 名称描述AVG()返回参数的平均…

python的pandas库中如何计算每列出现最多的值_Python Pandas:计算多个列的每个唯一值的显示次数...

假设我有一个DataFrame,如,In [7]: source pd.DataFrame([[amazon.com, correct, correct], [amazon.com, incorrect, correct], [walmart.com, incorrect, correct], [walmart.com, incorrect, incorrect]], columns[domain, price, product])In [8]: sourceOut[8]:domain pr…

Visual Studio 2017 新功能(下)

调试和诊断 运行时单击 只需在调试运行到此行时单击代码行旁边的图标。 无需再设置临时断点&#xff0c;也不必再执行多个步骤来执行代码和在所需行停止。 现在&#xff0c;调试器下停在中断状态时&#xff0c;“运行时单击”图标会在鼠标悬停位置的代码行旁边巧妙显示。 将鼠…

ssm使用全注解实现增删改查案例——IDeptService

/** * Title: IDeptService.java * Package org.service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2018-3-12 上午10:45:56 * version V1.0 */ package org.service;import java.util.List;import org.entity.Dept;/…

2018蓝桥杯省赛---java---B---3(复数幂)

题目描述 思路分析 代码实现 package com.atguigu.TEST;import java.io.File; import java.io.FileNotFoundException; import java.io.PrintStream; import java.math.BigInteger;class Main{public static void main(String[] args) {BigInteger two BigInteger.valueOf(2)…

聚簇索引和聚簇索引介绍

转载自 聚簇索引和聚簇索引介绍 一. 什么是索引和建立索引的好处 什么是索引 在数据库中&#xff0c;索引的含义与日常意义上的“索引”一词并无多大区别&#xff0c;与书中的索引一样&#xff0c;数据库中的索引使您可以快速找到表中的特定信息。索引包含从表中一个或多个…

ssm使用全注解实现增删改查案例——IEmpService

/** * Title: IEmpService.java * Package org.service * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2018-3-12 上午10:43:53 * version V1.0 */ package org.service;import java.util.List;import org.entity.Emp;/**…

admiration音标是什么_英语admiration的意思解释|读音发音|相关词语_英语词典_词林在线词典...

admirationad.mi.ra.tion[ˌdmərєʃən; ˌdməˋrєiʃn]《admire 的名词》名词1 (U) 赞叹,钦佩,赞赏; 憧憬,羡慕[of, for]feel [have] ~ for? 钦佩 [佩服] …in ~ of? 赞赏…with ~赞赏 [钦佩] 地2 [the ~]众人赞赏之对象[of]She is the ~ of her students.她是学生们钦慕…