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。

目录
相关文章
|
12月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
612 1
|
12月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
542 1
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
360 1
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
540 62
C# 中的 XML 与 JSON 数据处理
|
JSON JavaScript 前端开发
Go语言JSON 序列化与反序列化 -《Go语言实战指南》
本文介绍了 Go 语言中使用 `encoding/json` 包实现 JSON 与数据结构之间的转换。内容涵盖序列化(`Marshal`)和反序列化(`Unmarshal`),包括基本示例、结构体字段标签的使用、控制字段行为的标签(如 `omitempty` 和 `-`)、处理 `map` 和切片、嵌套结构体序列化、反序列化未知结构(使用 `map[string]interface{}`)以及 JSON 数组的解析。最后通过表格总结了序列化与反序列化的方法及类型要求,帮助开发者快速掌握 JSON 数据处理技巧。
|
XML JSON 数据可视化
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
本文详细介绍了不同数据集格式之间的转换方法,包括YOLO、VOC、COCO、JSON、TXT和PNG等格式,以及如何可视化验证数据集。
5461 1
数据集学习笔记(二): 转换不同类型的数据集用于模型训练(XML、VOC、YOLO、COCO、JSON、PNG)
|
JSON JavaScript Java
在Java中处理JSON数据:Jackson与Gson库比较
本文介绍了JSON数据交换格式及其在Java中的应用,重点探讨了两个强大的JSON处理库——Jackson和Gson。文章详细讲解了Jackson库的核心功能,包括数据绑定、流式API和树模型,并通过示例演示了如何使用Jackson进行JSON解析和生成。最后,作者分享了一些实用的代码片段和使用技巧,帮助读者更好地理解和应用这些工具。
1015 0
在Java中处理JSON数据:Jackson与Gson库比较
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
3598 0
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
486 0
|
存储 Java 编译器
说一说关于序列化/反序列化中的细节问题
我是小假 期待与你的下一次相遇 ~
330 1