`
JavaCrazyer
  • 浏览: 3011711 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类

Jackson优化使用实例

 
阅读更多

JSON的三种处理方式 
Jackson提供了三种可选的JSON处理方法(一种方式及其两个变型):

  • 流式 API(也称为"增量分析/生成") 读取和写入 JSON 内容作为离散事件。

  • 树模型 :提供一个 JSON 文档可变内存树的表示形式。

    • org.codehaus.jackson.map.ObjectMapper 生成树 ;树组成 JsonNode 节点集。

    • 树模型类似于 XML DOM。
  • 数据绑定: JSON和POJO相互转换,基于属性访问器规约或注解。

    • 有 两种变体: 简单 和 完整 的数据绑定:

    • 简单数据绑定: 是指从Java Map、List、String、Numbers、Boolean和空值进行转换

    • 完整数据绑定 :是指从任何 Java bean 类型 (及上文所述的"简单"类型) 进行转换

    • org.codehaus.jackson.map.ObjectMapper 对两个变种,进行编组(marshalling )处理 (写入 JSON) 和反编组(unmarshalling ,读 JSON)。

    • JAXB激励下的基于注释的 (代码优先)变种。

从使用的角度来看,总结这些3 种方法的用法如下:

  • 流 API: 性能最佳的方式 (最低开销、 速度最快的读/写; 其它二者基于它实现)。

  • 数据绑定 :使用最方便的方式。

  • 树模型: 最灵活的方式。

 

额,直接贴出所有代码吧,该说的都在代码中了

 

package com.wujintao.json;

import java.io.IOException;
import java.util.Date;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.ObjectReader;
import org.codehaus.jackson.map.ObjectWriter;
import org.junit.Test;

/**
 * http://wiki.fasterxml.com/JacksonDownload
 * http://wiki.fasterxml.com/JacksonInFiveMinutes
 * http://wiki.fasterxml.com/JacksonBestPracticesPerformance
 * http://jackson.codehaus.org/1.8.8/javadoc/index.html
 * http://wiki.fasterxml.com/ObjectReader
 * https://github.com/FasterXML/jackson-docs/wiki/ObjectWriter
 * jars:jackson-core-lgpl-1.8.10.jar,jackson-mapper-lgpl-1.8.10.jar
 * 
 * 1.实践结果,无论是哪种形式的转换,Jackson > Gson > Json-lib。Jackson的处理能力甚至高出Json-lib有10倍左右
 * 2.JSON-lib似乎已经停止更新,最新的版本也是基于JDK15,而Jackson的社区则较为活跃
 * 3.高并发情况下jackson表现尤为优越,内存占用甚少,json-lib会占用很多内存
 * 
 */
public class TestCase {
	
	@Test
	public void test() throws JsonGenerationException, JsonMappingException,
			IOException {
		long start = new Date().getTime();
		ObjectMapper mm = new ObjectMapper(); // can reuse, share
		Person pp = new Person();
		pp.setAdd("beijing");
		pp.setAge(11);
		pp.setSalary(1.1);
		pp.setSex('男');
		String jj = mm.writeValueAsString(pp);
		System.out.println(jj);

		Person pp2 = mm.readValue(jj, Person.class);
		System.out.println(pp2);
		
		long end = new Date().getTime();
		System.out.println("using ObjectMapper cost:"+(end-start)+"ms");

		System.out.println("=================================");
		// 7. Prefer ObjectReader/ObjectWriter over ObjectMapper
		// Although the main reason to prefer these objects is thread-safety
		// (and thus correctness),there may be performance benefits as well

		// 8.When reading a root-level sequence of POJOs,
		// readValues() method of ObjectReader can be much more efficient
		// than doing explicit iteration using ObjectMapper.readValue() method.

		long start2 = new Date().getTime();
		ObjectMapper mapper = new ObjectMapper();
		Person person = new Person();
		person.setAdd("beijing");
		person.setAge(11);
		person.setSalary(1.1);
		person.setSex('男');

		ObjectWriter writer = mapper.viewWriter(Person.class);
		String json = writer.writeValueAsString(person);
		System.out.println(json);
		// we'll be reading instances of MyBean
		ObjectReader reader = mapper.reader(Person.class);
		// and then do other configuration, if any, and read:
		Person result = reader.readValue(json);
		System.out.println(result);
		long end2 = new Date().getTime();
		System.out.println("using ObjectReader/ObjectWriter cost:"+(end2-start2)+"ms");
		
		//官网建议使用ObjectReader/ObjectWriter
	}
	
	//还有fast-json、Genson 等没做研究
}
2
2
分享到:
评论

相关推荐

    Jackson学习实例

    Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的序列化和反序列化功能,使得Java对象能够轻易地转换为JSON格式,反之亦然。在本"Jackson学习实例"中,我们将深入探讨Jackson库的核心概念、主要功能以及...

    Jackson实例入门

    在本篇文章中,我们将通过实例来入门Jackson的使用。 一、Jackson库简介 Jackson库的核心组件包括: 1. `Jackson-databind`:提供将Java对象映射到JSON和从JSON反序列化回Java对象的功能。 2. `Jackson-core`:基础...

    使用jackson完成json与java对象的互相转换实例

    本实例将详细介绍如何使用Jackson库进行JSON到Java对象的反序列化以及Java对象到JSON的序列化。 首先,我们需要引入Jackson库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...

    Jackson的使用

    Jackson可以通过`ObjectMapper`实例进行配置,以满足特定需求。例如,设置日期格式,启用或禁用特定的序列化特性,优化性能等: ```java ObjectMapper mapper = new ObjectMapper(); mapper.setDateFormat(new ...

    jackson-annotations-2.9.5.jar ,jackson-core-2.9.5.jar,jackson-databind-2.9.5.jar

    在使用Jackson时,开发者需要注意性能优化,例如通过配置`ObjectMapper`实例的序列化和反序列化设置,以及使用流式API来减少内存消耗。此外,为了防止安全问题,如JSON注入攻击,还需要正确配置和使用Jackson的安全...

    Jackson1.9 jar 全部jar包

    7. **Jackson-android**: 特别针对Android平台优化的Jackson库,体积更小,更适合移动设备。 在1.9版本中,Jackson已经具有相当完善的特性和性能,但后续的2.x版本引入了更多的改进和新特性,例如类型安全的POJO...

    jackson 使用方法(序列化效率很高)

    例如,可以禁用默认的`TypeInfo`写入以减少JSON的大小,或者使用`@JsonCreator`注解来定义构造函数或工厂方法,提高对象实例化的速度。 在提供的文档“Jackson框架,轻易转换JSON.doc”中,可能会详细阐述如何设置...

    jackson2 / jackson-all.jar

    Jackson还支持其他特性,如类型安全的泛型处理、XML与JSON互转、模块扩展(如处理Joda Time日期时间类型)以及性能优化选项。此外,Jackson也提供了对Java 8新特性的良好支持,例如Optional类和日期时间API。 总结...

    jackson2.2.3jar包集合.rar

    对于大型项目,可能还需要考虑线程安全性,以及如何在多线程环境中正确使用ObjectMapper实例。 总之,Jackson 2.2.3是一个强大的JSON处理工具,它为Java开发者提供了全面而高效的JSON操作解决方案。无论是在简单的...

    基于Java的实例源码-高性能的JSON处理 Jackson.zip

    标题中的“基于Java的实例源码-高性能的JSON处理 Jackson.zip”指的是包含了一组使用Jackson库进行JSON操作的Java源代码示例。这些示例可能涵盖了如何高效地解析JSON输入、生成JSON输出以及映射JSON到Java对象等方面...

    jackson-annotations-2.2.3,jackson-core-2.2.3,jackson-databind-2.2.3

    杰克逊(Jackson)是Java领域中广泛使用的JSON处理库,由 FasterXML 组织维护。这个压缩包包含了Jackson库的三个核心模块:`jackson-annotations-2.2.3`、`jackson-core-2.2.3` 和 `jackson-databind-2.2.3`,它们在...

    jackson-core-asl-1.9.13

    - **TypeReference**: 用于处理泛型类型的映射问题,帮助Jackson确定复杂类型的实例。 - **@JsonProperty**: 注解用于标记Java对象属性,指示它们应被包括在序列化或反序列化过程中。 - **@JsonInclude**: 控制哪些...

    jackson2.6 jar包(3个包)

    - **性能优化**:Jackson提供了许多性能优化策略,如启用流式处理、使用树模式、缓存序列化实例等,以提高处理大量JSON数据时的效率。 总的来说,Jackson 2.6版本提供了强大而灵活的JSON处理工具,是Java开发者处理...

    jackson最新资源包适合spring4.X

    这是因为Spring 4.x在设计时已经考虑了与Jackson 2.x系列的兼容性,而2.6及以上版本的Jackson修复了许多bug,提供了更多的功能和性能优化,更适合与Spring 4.x配合使用。 2. **Spring MVC集成**:在Spring MVC中,...

    Jackson资源jar包+api

    使用Jackson时,需要注意的点包括性能优化(如开启流模式、使用`writeValueAsBytes`代替`writeValueAsString`以减少内存消耗)、处理循环引用和避免无限递归等问题。 总之,Jackson是一个强大的JSON处理工具,其...

    jackson技术文档.rar

    4. 数据绑定:Jackson的数据绑定机制使它能直接将JSON解析到Java对象的实例,或从对象生成JSON,无需编写额外的代码。这对于构建RESTful API和处理JSON数据的Web服务非常有用。 5. 流式API:除了数据绑定,Jackson...

    jackson的一个简单的Demo

    Jackson是Java领域中广泛使用的库,用于处理JSON和XML数据。它提供了强大的功能,使得Java对象与这些数据格式之间的转换变得简单而高效。在“Jackson的一个简单的Demo”中,我们将探讨如何利用Jackson库进行对象到...

    jackson-2.11.0.zip

    Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来解析、生成、转换JSON数据。在给定的压缩包文件"jackson-2.11.0.zip"中,包含了三个核心模块的最新版本,分别是: 1. **jackson-core-...

    jackson2.6 (3个包)

    例如,你可以创建一个`ObjectMapper`实例,然后使用`writeValueAsString()`方法将Java对象转化为JSON字符串,或者使用`readValue()`方法将JSON字符串转化为指定类型的Java对象。 2. **注解支持** Jackson 2.6引入...

    jackson2.4.2.0.jar

    Jackson提供了许多性能优化选项,如启用流式处理(Streaming API)以处理大型JSON文档,或者配置`ObjectMapper`实例以减少内存使用和提高速度。 6. **版本更新**: Jackson 2.4.2.0是较早的版本,后续的版本可能...

Global site tag (gtag.js) - Google Analytics