`

Java对象的序列化与反序列化-Json篇

阅读更多
说到Java对象的序列化与反序列化,我们首先想到的应该是Java的Serializable接口,这玩意在两个系统之间的DTO对象里面可能会用到,用于系统之间的数据传输。或者在RPC(远程方法调用)时可能会用到。

但其实若是用于数据传输,xml和json两种数据格式用得更多一些。我在第一家公司上班是也曾经自己封装过Java对象与xml相互转换的工具,你可能会说为什么不用XStream呢,XStream确实好用,但是在Applet环境下可以使用的xml类库也就只有jdom了,连dom4j在Applet环境下都没有权限使用(Java反射的某些特性是需要权限的,Applet的安全机制不允许)。

扯远了,本文要说的是Java对象与Json的相互转换。目前Java常用的Json类库有3种,即fastjson、jackson和gson,分别介绍如何将一个Java对象转换成Json和将一个Json字符串转换成Java对象,其实它们的用法大同小异。

一、首先看Maven依赖
二、需要序列化的POJO和初始化代码
三、fastjson的使用
四、jackson的使用
五、gson的使用

一、首先看Maven依赖

若不会maven,请参考Maven的基本用法:http://jisonami.iteye.com/blog/2300036

<!-- json -->
<!-- 引入fastjson依赖 -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.12</version>
</dependency>
<!-- 引jackson依赖 -->
<!-- jackson核心包,必选,提供基于“流模式”解析的API -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-core</artifactId>
	<version>2.7.4</version>
</dependency>
<!-- jackson注解包,可选,提供注解功能 -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.7.4</version>
</dependency>
<!-- jackson数据绑定包,可选,提供基于“对象绑定”和“树模型”相关API -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.7.4</version>
</dependency>
<!-- 引入gson依赖 -->
<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.6.2</version>
</dependency>


二、需要序列化的POJO和初始化代码
以下3种类库的使用均使用下面这个POJO
public class User {
	public User(){}
	private String id;
	private String name;
	private String password;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", password=" + password
				+ "]";
	}	
}


/**
 * 初始化User对象
 * @return user
 */
private static User initUser(){
	User user = new User();
	user.setId("1");
	user.setName("jison");
	user.setPassword("jison");
	return user;
}


三、fastjson的使用
fastjson的主要工具类是JSON,以下代码实现Java对象的序列化与反序列化
// 将Java对象序列化为Json字符串
	String objectToJson = JSON.toJSONString(initUser());
	System.out.println(objectToJson);
	// 将Json字符串反序列化为Java对象
	User user = JSON.parseObject(objectToJson, User.class);
	System.out.println(user);


四、jackson的使用
jackson我们经常用到的是它的数据绑定包下的ObjectMapper类,以下代码实现Java对象的序列化与反序列化
ObjectMapper objectMapper = new ObjectMapper();
	// 将Java对象序列化为Json字符串
	String objectToJson = objectMapper.writeValueAsString(initUser());
	System.out.println(objectToJson);
	// 将Json字符串反序列化为Java对象
	User user = objectMapper.readValue(objectToJson, User.class);
	System.out.println(user);


五、gson的使用
gson的主要工具类是Gson,使用GsonBuilder构造,以下代码实现Java对象的序列化与反序列化
Gson gson = new GsonBuilder().create();
	// 将Java对象序列化为Json字符串
	String objectToJson = gson.toJson(initUser());
	System.out.println(objectToJson);
	// 将Json字符串反序列化为Java对象
	User user = gson.fromJson(objectToJson, User.class);
	System.out.println(user);


以上3种json类库的完整代码如下:
public class JsonUtils {

	/**
	 * 初始化User对象
	 * @return user
	 */
	private static User initUser(){
		User user = new User();
		user.setId("1");
		user.setName("jison");
		user.setPassword("jison");
		return user;
	}
	
	public static void main(String[] args) throws Exception {
		// fastjson用法
		fastjson();
		// jackson用法
		jackson();
		// gson用法
		gson();
	}
	
	private static void fastjson(){
		// 将Java对象序列化为Json字符串
		String objectToJson = JSON.toJSONString(initUser());
		System.out.println(objectToJson);
		// 将Json字符串反序列化为Java对象
		User user = JSON.parseObject(objectToJson, User.class);
		System.out.println(user);
	}
	
	private static void jackson() throws Exception{
		ObjectMapper objectMapper = new ObjectMapper();
		// 将Java对象序列化为Json字符串
		String objectToJson = objectMapper.writeValueAsString(initUser());
		System.out.println(objectToJson);
		// 将Json字符串反序列化为Java对象
		User user = objectMapper.readValue(objectToJson, User.class);
		System.out.println(user);
	}
	
	private static void gson(){
		Gson gson = new GsonBuilder().create();
		// 将Java对象序列化为Json字符串
		String objectToJson = gson.toJson(initUser());
		System.out.println(objectToJson);
		// 将Json字符串反序列化为Java对象
		User user = gson.fromJson(objectToJson, User.class);
		System.out.println(user);
	}
}
0
0
分享到:
评论

相关推荐

    Java Json序列化与反序列化

    本篇文章将深入探讨Java中JSON的序列化与反序列化,以及相关的工具库。 一、JSON概述 JSON是一种独立于语言的数据格式,它的结构简单明了,易于人阅读和编写,同时也容易让机器解析和生成。JSON主要由键值对(key-...

    json序列化与反序列化处理代码(java版本)

    极好的序列化与发序列化代码。可以处理array集合,数组或者单个对象等的序列化与反序列化。

    json-lib 序列化和反序列化

    在`json-lib`中,序列化是指将Java对象转换成JSON字符串的过程,而反序列化则是将JSON字符串转换回Java对象。以下是对这两个过程的详细说明: 1. **序列化**: - 使用`json-lib`,你可以通过`...

    Json反序列化

    在本篇文章中,我们将深入探讨JSON反序列化的概念、原因以及在实际开发中的应用。 一、什么是JSON反序列化? 当一个Web服务端通过HTTP响应返回JSON格式的数据时,客户端(如浏览器或服务器端脚本)需要将这些数据...

    Json序列化与反序列化

    在编程中,我们经常需要将JSON对象转换为编程语言中的数据结构(如Java对象、C#类等),这个过程称为序列化;反之,将编程语言中的数据结构转换回JSON字符串则称为反序列化。 **一、Json序列化** 序列化是将数据...

    Json序列化与反序列化详解

    本文将深入探讨JSON的序列化与反序列化过程,以及如何使用Gson、FastJson和Jackson这三种流行的Java库来实现这一功能。 一、什么是JSON序列化与反序列化? 1. JSON序列化:序列化是指将Java对象转换为JSON字符串的...

    C#和Java的序列化反序列化

    本篇文章将深入探讨C#和Java中的序列化与反序列化机制。 首先,我们要了解什么是序列化。序列化是指将对象的状态转化为可存储或可传输的数据格式的过程。这个过程通常将内存中的对象转换成字节流,以便保存到磁盘、...

    Java对象的序列化与反序列化Java开发Java经验技巧

    - **重要性**:Java序列化机制依赖于`serialVersionUID`字段来验证序列化版本的一致性。 - **默认生成**:当类首次序列化时,JVM会根据类的结构自动生成一个`serialVersionUID`。 - **手动指定**:为了确保反序列...

    json-lib-2.1.jar和struts2-json-plugin-2.1.8.1.jar

    在Java世界里,`json-lib-2.1.jar` 是一个用于处理JSON的库,它提供了一系列的方法来将Java对象转换为JSON格式,以及将JSON字符串反序列化回Java对象。这个库支持多种Java类型,包括基本类型、集合、Map、自定义Java...

    jackson json序列化,反序列化所需jar包

    在Java应用程序中,我们经常需要将Java对象转换为JSON字符串(序列化)或从JSON字符串恢复Java对象(反序列化),Jackson库就是完成这一任务的理想选择。 Jackson库由三个主要模块组成: 1. **jackson-databind**...

    关于 Java 对象序列化您不知道的 5 件事

    Java对象序列化是Java平台的一项重要特性,它允许将对象的状态转换为字节流,以便存储、传输或恢复。在本文中,我们将深入探讨关于Java对象序列化你可能不知道的五件事情,这些知识点对于理解和优化你的Java应用程序...

    json-lib-2.4-jdk15.jar下载

    3. 支持注解:支持@JSON、@JSONIgnore等注解配置对象的序列化和反序列化。 4. 支持流:除了支持对象/JSON与字符串的相互转换,也支持与InputStream/OutputStream的相互转换,处理大数据时比较有用。 5. 无依赖:json-lib...

    Android-Android上的Java对象反序列化

    一、Java对象序列化与反序列化 1. **序列化**: 序列化是将Java对象转换为字节流的过程,以便于存储或传输。通过实现`java.io.Serializable`接口,一个Java对象可以获得序列化的能力。序列化不仅可以保存对象的状态...

    JSON序列化及反序列化工具

    10万次序列化,1万次反序列化,毫秒。 阿里序列化时间 1122 1054 1115 阿里反序列化时间 409 423 412 HZS序列化时间 884 864 880 HZS反序列化时间 392 375 394 JAVA7版已经逼近阿里的速度,JAVA8版利用了闭包技术...

    java对象序列化与反序列化的默认格式和json格式使用示例

    这就是Java对象序列化与反序列化的基本概念,以及如何与JSON格式结合使用的示例。在实际应用中,我们还需要考虑异常处理、性能优化以及安全性问题,比如使用`transient`关键字忽略某些字段,或者使用`@...

    java反序列化利用工具

    `Newtonsoft.Json.dll`是.NET框架下的Json.NET库,它提供了JSON序列化和反序列化的功能,但在这个场景下可能与Java反序列化无关,除非系统中混合使用了.NET和Java技术。`Run.exe`是一个Windows可执行文件,可能用于...

    JSON序列化反序列化带List

    本文将深入探讨如何在Delphi中进行JSON序列化与反序列化,特别是涉及List类型的数据。 首先,从2010年开始,Delphi引入了VCL库中的`System.JSON`单元,提供了`TJSON`类和相关的函数,使得处理JSON变得十分方便。在...

    使用json-lib完成json的序列化和反序列化.pdf

    JSON库如json-lib为Java提供了序列化和反序列化的能力,即将Java对象转换为JSON字符串,以及将JSON字符串还原为Java对象。以下是关于使用json-lib进行JSON序列化和反序列化的详细说明: 1. **JSON对象的序列化** ...

    JSON序列化与反序列化JAVA工具

    10万次序列化,1万次反序列化,毫秒。 阿里序列化时间 1229 1133 1179 阿里反序列化时间 478 523 466 HZS序列化时间 1089 998 1010 HZS反序列化时间 606 623 635 测试代码如下: { org.hzs.json.JSONObject bjson...

    Java对象的序列化和反序列化实践

    在Java编程语言中,对象的序列化和反序列化是两个关键的概念,它们对于数据存储、网络传输以及持久化有着重要的作用。这篇文章将深入探讨这两个主题,并通过实践例子来阐述其工作原理。 **序列化(Serialization)*...

Global site tag (gtag.js) - Google Analytics