GSON实现Java对象的JSON序列化与反序列化的实例教程
作者:goldensun 发布时间:2023-11-23 12:39:02
标签:GSON,Java
从GitHub下载GSON:https://github.com/google/gson
Gson的应用主要为toJson与fromJson两个转换函数,而在使用这种对象转换之前需先创建好对象的类别以及其成员才能成功的将JSON字符串成功转换成相对应的对象。
class Examples {
private int answer1 = 100;
private String answer2 = "Hello world!";
Examples(){
} // default constructor
}
序列化JAVA对象成JSON字符串
Examples example1 = new Examples();
Gson gson = new Gson();
String json = gson.toJson(example1);
json结果将是
{"answer1":100,"answer2":"Hello world!"}
反序列化JSON字符串成对应的JAVA对象
Examples example2= gson.fromJson(json,Examples.class);
==> example2即與example1相同
对象example1通过toJson序列化成JSON字符串传递,再宣告一个对象example2为接收了JSON后通过fromJson反序列化成example2,故example1与example2相同
示例:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
class User{
public User(String name,int age,StringBuffer sex,boolean isChild){
this.name = name;
this.age = age;
this.sex = sex;
this.isChild = isChild;
}
private String name;
private int age;
private StringBuffer sex;
private boolean isChild;
public String toString(){
return "{name="+name+";age="+age+";sex="+sex+";isChild="+isChild+"}";
}
public int hashCode(){
return name.hashCode()*100+age;
}
}
public class GsonTest {
public static void main(String[] args) {
Gson gson = new Gson();
System.out.println("1普通的Bean的转换**************************");
System.out.println("将一个Bean转换成为json字符串->");
User user1 = new User("凤姐",12,new StringBuffer("未知"),true);
System.out.println("转换之前的user1"+user1);
String json = gson.toJson(user1);
System.out.println("User对象转换成为Json字符串,json==="+json);
System.out.println("***************************");
System.out.println("将一个json字符串转换成为Bean->");
User user2 = gson.fromJson(json, User.class);
System.out.println("转换成为的user2=="+user2);
System.out.println();
System.out.println("2Collection集合的转换**************************");
System.out.println("将一个Bean的List集合转换成为json字符串->");
Collection<User> userList1 = new ArrayList<User>();
for(int i=0;i<3;i++){
User user = new User("如花",10+i,new StringBuffer("男"),false);
userList1.add(user);
}
json = gson.toJson(userList1);
System.out.println("User的List集合对象转换成为Json字符串,json==="+json);
System.out.println("***************************");
System.out.println("将一个json字符串转换成为Bean的List集合->");
Collection<User> userList2 =
gson.fromJson(json,
new TypeToken<Collection<User>>(){}.getType());
System.out.println("转换成为的User的List集合,userList2="+userList2);
System.out.println();
System.out.println("3Array数组的转换**************************");
System.out.println("将一个Bean的Array数组转换成为json字符串->");
User [] userArray1 = new User[3];
for(int i=0;i<userArray1.length;i++){
userArray1[i] = new User("芙蓉",20,new StringBuffer(" * "),true);
}
json = gson.toJson(userArray1);
System.out.println("User的数组对象转换成为Json字符串,json==="+json);
System.out.println("***************************");
System.out.println("将一个json字符串转换成为Bean的数组对象->");
User [] userArray2 = gson.fromJson(json, new TypeToken<User[]>(){}.getType());
System.out.println("转换成为的User的数组对象,userArray2="+Arrays.toString(userArray2));
System.out.println();
System.out.println("4Map的转换**************************");
System.out.println("将一个Bean的Map转换成为json字符串->");
Map<String,User> map1 = new HashMap<String,User>();
for(int i=0;i<3;i++){
map1.put(""+(i+10), userArray1[i]);
}
json = gson.toJson(map1);
System.out.println("User的Map集合转换成为Json字符串,json==="+json);
System.out.println("***************************");
System.out.println("将一个json字符串转换成为Bean的数组对象->");
Map<String,User> map2 =
gson.fromJson(json,
new TypeToken<Map<String,User>>(){}.getType());
System.out.println("转换成为的User的数组对象,map2=="+map2);
}
}
运行结果:
1普通的Bean的转换**************************
将一个Bean转换成为json字符串->
转换之前的user1{name=凤姐;age=12;sex=未知;isChild=true}
User对象转换成为Json字符串,json==={"name":"凤姐","age":12,"sex":"未知","isChild":true}
***************************
将一个json字符串转换成为Bean->
转换成为的user2=={name=凤姐;age=12;sex=未知;isChild=true}
2Collection集合的转换**************************
将一个Bean的List集合转换成为json字符串->
User的List集合对象转换成为Json字符串,json===[{"name":"如花","age":10,"sex":"男","isChild":false},{"name":"如花","age":11,"sex":"男","isChild":false},{"name":"如花","age":12,"sex":"男","isChild":false}]
***************************
将一个json字符串转换成为Bean的List集合->
转换成为的User的List集合,userList2=[{name=如花;age=10;sex=男;isChild=false}, {name=如花;age=11;sex=男;isChild=false}, {name=如花;age=12;sex=男;isChild=false}]
3Array数组的转换**************************
将一个Bean的Array数组转换成为json字符串->
User的数组对象转换成为Json字符串,json===[{"name":"芙蓉","age":20,"sex":" * ","isChild":true},{"name":"芙蓉","age":20,"sex":" * ","isChild":true},{"name":"芙蓉","age":20,"sex":" * ","isChild":true}]
***************************
将一个json字符串转换成为Bean的数组对象->
转换成为的User的数组对象,userArray2=[{name=芙蓉;age=20;sex= * ;isChild=true}, {name=芙蓉;age=20;sex= * ;isChild=true}, {name=芙蓉;age=20;sex= * ;isChild=true}]
4Map的转换**************************
将一个Bean的Map转换成为json字符串->
User的Map集合转换成为Json字符串,json==={"10":{"name":"芙蓉","age":20,"sex":" * ","isChild":true},"11":{"name":"芙蓉","age":20,"sex":" * ","isChild":true},"12":{"name":"芙蓉","age":20,"sex":" * ","isChild":true}}
***************************
将一个json字符串转换成为Bean的数组对象->
转换成为的User的数组对象,map2=={10={name=芙蓉;age=20;sex= * ;isChild=true}, 11={name=芙蓉;age=20;sex= * ;isChild=true}, 12={name=芙蓉;age=20;sex= * ;isChild=true}}


猜你喜欢
- 前言这篇博客学习下Mybatis操作中使用Redis做缓存。这里其实主要学习几个注解:@CachePut、@Cacheable、@Cache
- 【SpringBoot】通过Feign调用传递Header中参数如何通过Feign传递Header参数问题描述我们在SpringCloud中
- 前言本文尝试从What、Why、How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义、基本使用场景和使用方法。一、&
- 0x01 创建要转换的类和主函数注意这里一定要实现序列化package day1; import java.io.Serializable;
- 本节只是介绍实战部分,具体的理论参数,请自行百度。所需工具:linux服务器 Jmeter测试工具 xshell &
- 话不多说,请看下面//C# 代码int year = DateTime.Now.Year;int month = DateTime.Now.
- Web.Config,其中一部分配置如下: <appSettings> <
- 在早期开发的时候,我们完成的都是静态页面也就是html页面,随着时间轴的发展,慢慢的引入了jsp页面,当在后端服务查询到数据之后可以转发到j
- 1.使用IDEA新建项目2.选择创建Maven工程3.填写GroupId和ArtifactId4.填写项目名称,与上一步的ArtifactI
- 一 . 高效加载 BitmapBitMapFactory 提供了四类方法: decodeFile,decodeResource,decode
- 前言其实很多人都会碰到文本不对齐,文字不对齐的情况,但是只要不明显被提出,一般都会置之不理。我关注这个问题是因为有个老哥问我倒计时的时候,1
- 【1】引用命名空间://System.Net.Socketsusing System.Net.Sockets; // 以太网对象
- /** * 冒泡排序估计是每本算法书籍都会提到的排序方法。 * 它的基本思路是对长度为N的序列,用N趟来将其排成有序序列。 * 第1趟
- spring profile 多环境配置管理现象 如果在开发时进行一些数据库测试,希望链接到一个测试的数据库,以避免对开发数据
- 1、题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知
- 本文实例为大家分享了C#根据http和ftp地址获取对应图片的具体代码,供大家参考,具体内容如下public class GetBitmap
- 原文地址:http://www.javayihao.top/detail/84一:概述由于springboot项目,不管是java工程还是w
- 背景数据之间两两趋势比较在数据分析应用中是非常常见的应用场景,如下所示:模拟考批次班级学生语文数学英语202302三年一班张小明130145
- 为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平。你的一个决定会影响团队未来的几年。要考虑方面太多:
- 本文实例讲述了C#编程获取各种电脑硬件信息的方法。分享给大家供大家参考,具体如下:获取CPU编号:ManagementClass mc =