--> 首先导入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序列化及反序列化的更多相关文章

  1. java 对象序列化与反序列化

    Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为 ...

  2. Java对象序列化与反序列化一 JSON

    Java对象序列化与反序列化一 JSON 1. 依赖库 jackson-all-1.6.1.jar 2. 代码 public class Student {    private String nam ...

  3. Java对象序列化和反序列化的工具方法

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  4. Java之序列化和反序列化

    序列化的对象: package test_demo.SerializableOper; import java.io.Serializable; /* * 序列化对象需要实现序列号接口 * */ pu ...

  5. java之序列化与反序列化

    1.这里主要是介绍Protobuf提供的序列化与反序列化的高效性.相对于传统的java提供的序列化来说,Protobuf的效率提高了很多倍.但是也有不足的地方,就是proto在对象序列化的时候抛弃了很 ...

  6. Java基础—序列化与反序列化(转载)

    转载自: Java序列化与反序列化 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化 ...

  7. Java 中序列化与反序列化

    一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...

  8. JAVA的序列化与反序列化

    一.为什么要进行序列化 再介绍之前,我们有必要先了解下对象的生命周期,我们知道Java对象的生命周期,也即Java中的远程方法调用RMI也会被用到,在网络中要传输对象的话,则必须要对对象进行序列化,关 ...

  9. 深入分析Java的序列化与反序列化

    序列化是一种对象持久化的手段.普遍应用在网络传输.RMI等场景中.本文通过分析ArrayList的序列化来介绍Java序列化的相关内容.主要涉及到以下几个问题: 怎么实现Java的序列化 为什么实现了 ...

  10. Java 对象序列化和反序列化

         之前的文章中我们介绍过有关字节流字符流的使用,当时我们对于将一个对象输出到流中的操作,使用DataOutputStream流将该对象中的每个属性值逐个输出到流中,读出时相反.在我们看来这种行 ...

随机推荐

  1. Cheatsheet: 2016 02.01 ~ 02.29

    Web How to do distributed locking Writing Next Generation Reusable JavaScript Modules in ECMAScript ...

  2. IntelliJ IDEA中使用综合使用Maven和Struts2

    在Intellij IDEA中手动使用Maven创建Web项目并引入Struts2 创建一个新的Maven项目 建好项目之后点击左下角的enable auto import 项目部署 在Moudule ...

  3. 转!!URL 传+号到后台变空格问题解决方案

    网上很多解决方法,但是前提是get请求(或者是post请求后面追加的参数),让我试了很久(我是post),没成功!引以为戒!! 今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是 ...

  4. springboot

    http://7player.cn/2015/08/30/%E3%80%90%E5%8E%9F%E5%88%9B%E3%80%91%E5%9F%BA%E4%BA%8Espringboot-mybati ...

  5. Mac 安装mysql

    下载mysql-5.7.14-osx10.11-x86_64.tar # 移动解压后的二进制包到安装目录 sudo mv mysql-5.6.24-osx10.9-x86_64 /usr/local/ ...

  6. 3d加速的一些问题

    笔记本一般有双显卡,默认可以切换,但是使用浏览器打开的要合适的浏览器 打开WEBGL程序,包括驱动,浏览器,有时候需要手工设置独立显卡 一般来说价钱四五千以上的笔记本电脑都是支持WEBGL的,而且可以 ...

  7. 69道Spring面试题和答案

    1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Spring 框架目标是简化Jav ...

  8. 解决Ubuntu 下 vi编辑器不能使用方向键和退格键问题

    转自:http://blog.csdn.net/sky101010ws/article/details/51012103 使用vi命令时,不能正常编辑文件,使用方向键时老是出现很多字母 这个问题主要是 ...

  9. 自定义控件之 Combobox

    var ComboboxObj = function (id, url) { this.URL = url; //Ajax url this.ID = id; //combobox id this.m ...

  10. LazyLoad使用注意

    今天使用ProgressHUD,进行网络请求后显示加载完成提示框,但是无效,检查以后发现数据源数组使用了懒加载,在调用数组之前调用ProgressHUD里的方法,根本无效啊!以后用懒加载注意.