Java-->Gson序列化及反序列化
--> 首先导入jar包,并添加到Build Path
--> 需要User类:有属性、构造方法和setter、getter方法。
--> Test 测试类:
package com.dragon.java.gson; import java.util.Arrays;
import java.util.List; import com.dragon.java.json.User;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken; /*
Gson: Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。
--> 可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
*/
public class Test {
public static void main(String[] args) {
String json = "{\"name\": \"李四\", \"age\": 30}";
String jsons = "[{\"name\": \"李四\", \"age\": 40},{\"name\": \"张三\", \"age\": 20},{\"name\": \"王五\", \"age\": 30}]";
String jsonss = "{\"status\":\"ok\", \"data\": [{\"name\": \"李四\", \"age\": 30},{\"name\": \"张三\", \"age\": 20},{\"name\": \"王五\", \"age\": 30}] }"; gsonFirst(json);
System.out.println("----------------");
gsonTypeToken(jsons);
System.out.println("----------------");
gsonFinal(jsonss);
System.out.println("----------------");
serializtion();
System.out.println("----------------");
} /**
* 序列化
*/
private static void serializtion() {
// User user = new User("张三", 20);
Gson gson = new Gson();
// String jsonString = gson.toJson(user); User[] users = { new User("张三", 20), new User("李四", 30),
new User("王五", 40) };
// 把数组或可变参数转换成集合。这个集合是不可变的集合,不能添加或排除元素
List<User> userList = Arrays.asList(users);
// 可以将集合变为可操作的集合 // new ArrayList<>().addAll(userlist);
String json = gson.toJson(users);
System.out.println(json);
String json2 = gson.toJson(userList);
System.out.println(json2);
} /**
* Gson解析
*
* @param jsonss
*/
private static void gsonFinal(String jsonss) {
// 截取有用的字符串。也可以结合官方解析截取
//String newJson = jsonss.substring(jsonss.indexOf("["),jsonss.lastIndexOf("]") + 1);
Gson gson = new Gson();
A a = gson.fromJson(jsonss, A.class);
if (a.getStatus().equals("ok")) {
System.out.println(a.getStatus());
List<User> data = a.getData();
for (User user : data) {
System.out.println(user);
}
}
} /**
* TypeToken<>(){}
*
* @param jsons
*/
private static void gsonTypeToken(String jsons) {
Gson gson = new Gson();
// List users = gson.fromJson(jsons, List.class); // 泛型擦除:写的任何的泛型类,变成.class之后泛型都会丢失
TypeToken<List<User>> listType = new TypeToken<List<User>>() {
}; // TypeToken<>(){} --> (protected)抽象类 --> 记住泛型的类型 --> new了TypeToken的匿名内部类
List<User> users = gson.fromJson(jsons, listType.getType());
for (User user : users) {
System.out.println(user);
}
} /**
* 解析Json字符串
* 反序列化
*
* @param json
*/
private static void gsonFirst(String json) {
// 1、创建一个Gson对象
Gson gson = new Gson();
// 2、解析字符串
// --> 必须有无参的构造函数
// --> 每个属性必须提供setter、getter方法
User user = gson.fromJson(json, User.class);
System.out.println(user);
}
}
Java-->Gson序列化及反序列化的更多相关文章
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- Java对象序列化与反序列化一 JSON
Java对象序列化与反序列化一 JSON 1. 依赖库 jackson-all-1.6.1.jar 2. 代码 public class Student { private String nam ...
- Java对象序列化和反序列化的工具方法
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- Java之序列化和反序列化
序列化的对象: package test_demo.SerializableOper; import java.io.Serializable; /* * 序列化对象需要实现序列号接口 * */ pu ...
- java之序列化与反序列化
1.这里主要是介绍Protobuf提供的序列化与反序列化的高效性.相对于传统的java提供的序列化来说,Protobuf的效率提高了很多倍.但是也有不足的地方,就是proto在对象序列化的时候抛弃了很 ...
- Java基础—序列化与反序列化(转载)
转载自: Java序列化与反序列化 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化 ...
- Java 中序列化与反序列化
一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...
- JAVA的序列化与反序列化
一.为什么要进行序列化 再介绍之前,我们有必要先了解下对象的生命周期,我们知道Java对象的生命周期,也即Java中的远程方法调用RMI也会被用到,在网络中要传输对象的话,则必须要对对象进行序列化,关 ...
- 深入分析Java的序列化与反序列化
序列化是一种对象持久化的手段.普遍应用在网络传输.RMI等场景中.本文通过分析ArrayList的序列化来介绍Java序列化的相关内容.主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了 ...
- Java 对象序列化和反序列化
之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反.在我们看来这种行 ...
随机推荐
- Java-简陋的图书管理
本文代码为原创一个简陋的管理系统,只做功能的测试.并没有去完善所有应有的功能,只做了输入输出查找.仅供参考! 菜单部分: import java.util.Scanner; public class ...
- php新手常用的函数(随时更新)
//数字保留两位小数 $n = sprintf("%1.2f", $n); //方法二 $n = number_format($n, 2, '.', ''); //UTF8转GBK ...
- cellery ImportError & AttributeError
一.zz的问题 celery 运行work要进入到 文件所在的文件夹下执行 二.AttributeError: 'Flask' object has no attribute 'user_option ...
- oracle 之 游标
本期主题 灰蓝 游标用来处理从数据库中检索的多行记录(使用SELECT语句)存放的是select 的结果 利用游标,程序可以逐个地处理和遍历一次检索返回的整个记录集 --隐式游标 begin upd ...
- 6个html5页面适配iphone6的技巧
iphone6及iphone6plus已经出来一段时间了.很多移动端网站,以前写死body为320px的,现在估计也忙着做适配了. 大屏幕手机其实一直有,只是以前大家没怎么重视,移动端的H5页面大部分 ...
- 使用spark与ElasticSearch交互
使用 elasticsearch-hadoop 包,可在 github 中搜索到该项目 项目地址 example import org.elasticsearch.spark._ import org ...
- 【bzoj1098】办公楼
[bzoj1098]办公楼 题意 FGD开办了一家电话公司.他雇用了N个职员,给了每个职员一部手机.每个职员的手机里都存储有一些同事的电话号码.由于FGD的公司规模不断扩大,旧的办公楼已经显得十分狭窄 ...
- 【小月博客】用HTML5的File API做上传图片预览功能
前段时间做了一个项目,涉及到上传本地图片以及预览的功能,正好之前了解过 html5(点击查看更多关于web前端的有关资源) 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(P ...
- .htaccess语法中RewriteCond和RewriteRule意义
今天看了301重定向设置的方法,对网站的首页权重有较重要意义.于是看了别人写的.htaccess文件发现一头雾水,于是查了一些资料来进一步理解. RewriteCond语法 RewriteCond T ...
- python实现屏幕截图
from selenium import webdriver import time def capture(url, save_fn="capture.png"): browse ...