jackson (json、xml的序列化与反序列化)

简介: jackson用于java对象到json的序列化与反序列化。还支持xml格式。 jackson用于实现json与java对象的序列与反序列化。web service要实现跨机器传送对象那么就需要有一种技术能把对象转换为特定格式的信息。为了实现跨平台(比如把java对象转化为c#或c++对象),又考虑到方便人们阅读,所以基于字符串规则的转换是最理想的。json就是这样一个轻量级的数据交换格

jackson用于java对象到json的序列化与反序列化。还支持xml格式。

jackson用于实现json与java对象的序列与反序列化。web service要实现跨机器传送对象那么就需要有一种技术能把对象转换为特定格式的信息。为了实现跨平台(比如把java对象转化为c#或c++对象),又考虑到方便人们阅读,所以基于字符串规则的转换是最理想的。json就是这样一个轻量级的数据交换格式,而jackson是一个实现该功能的很好用的框架。

1.获得

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId> jackson-databind</artifactId>
	<version>2.6.4</version>
</dependency>
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-annotations</artifactId>
	<version>2.6.4</version>
</dependency>

2.常用注解

@com.fasterxml.jackson.annotation.JsonPropertyOrder
指定序列化为json串时的各字段顺序
@com.fasterxml.jackson.annotation.JsonIgnoreProperties
指定序列化为json串时排除的一些字段

例子:

@JsonAutoDetect
@JsonPropertyOrder(value = {"price", "name"})
@JsonIgnoreProperties(value = {"year"})
public class Book {
	public String name = "Physics";
	public String price = "123";
	public String year = "2015";
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public Book wsBook(){
		return new Book();
	}
}

@com.fasterxml.jackson.annotation. JsonProperty
字段在序列化时只用指定的别名

3. 常用函数

com.fasterxml.jackson.databind. ObjectMapper
核心类。
com.fasterxml.jackson.databind.ObjectMapper. ObjectMapper()
ObjectMapper的构造函数,得到的对象是线程安全的,建议在程序中作为静态成员直接用。

3.1 对象与json

<T> T com.fasterxml.jackson.databind.ObjectMapper. readValue(File src, Class<T> valueType)
从文件中直接反序列化,当然,文件中是json格式的字符串。
<T> T com.fasterxml.jackson.databind.ObjectMapper. readValue(String content, Class<T> valueType)
从字符串中反序列化。
public void writeValue(File resultFile, Object value)
将对象序列化到文件中去。文件是json格式的文本文件。
String com.fasterxml.jackson.databind.ObjectMapper. writeValueAsString(Object value) 
将对象序列化成json格式的string。

3.2 泛型

<T> T com.fasterxml.jackson.databind.ObjectMapper. readValue(URL src, TypeReference   valueTypeRef) 
反序列化时指定泛型参数。这个函数很有用,如:
public static ConcurrentHashMap<String,Integer> readMapFromFile(File file) throws JsonParseException, JsonMappingException, IOException{
		//new an anonymous class
		return objectMapper.readValue(file, new TypeReference<ConcurrentHashMap<String,Integer>>() {});
	}

3.3 缩进

ObjectMapper objectMapper=new ObjectMapper(). enable(SerializationFeature. INDENT_OUTPUT);
此时序列化后的json带缩进,方便肉眼看。

3.4 jsonNode

com.fasterxml.jackson.databind. JsonNode
json同xml类似,背后的数据结构都是树。当我们不需要反序列化,直接遍历某些节点时,就可以用JsonNode。
JsonNode com.fasterxml.jackson.databind.ObjectMapper.readTree(String content)
读取json,得到root节点。
JsonNode com.fasterxml.jackson.databind.JsonNode. get(String fieldName)
获取指定的孩子node。若不存在返回null。
String com.fasterxml.jackson.databind.JsonNode. asText()
将当前节点的内容以string格式输出。
String com.fasterxml.jackson.databind.JsonNode. asText(String defaultValue)
当指定的节点不存在时返回形参中的默认值。

4.示例

5.xml

在以上依赖的基础上添加:
<dependency>
	<groupId>com.fasterxml.jackson.dataformat</groupId>
	<artifactId>jackson-dataformat-xml</artifactId>
	<version>2.6.4</version>
</dependency>

5.1 常用类与函数

com.fasterxml.jackson.dataformat.xml. XmlMapper
它是ObjectMapper类的子类,用于处理xml。
注意mapper.enable(SerializationFeature.INDENT_OUTPUT);是不支持的。

6.指定反序列化时的实现类

如果是List接口,默认实现类是ArrayList。如果写明了LinkedList等,那么反序列化后就是LinkedList。

目录
相关文章
|
24天前
|
JSON JavaScript Java
对比JSON和Hessian2的序列化格式
通过以上对比分析,希望能够帮助开发者在不同场景下选择最适合的序列化格式,提高系统的整体性能和可维护性。
33 3
|
1月前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
1月前
|
JSON JavaScript 前端开发
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
122 0
在Java中处理JSON数据:Jackson与Gson库比较
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
2月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
1月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
33 0
|
3月前
|
JSON 安全 编译器
扩展类实例的序列化和反序列化
扩展类实例的序列化和反序列化
38 1
|
3月前
|
存储 XML JSON
用示例说明序列化和反序列化
用示例说明序列化和反序列化
21 1