JSON的三种处理方式
Jackson提供了三种可选的JSON处理方法(一种方式及其两个变型):
-
流式 API:(也称为"增量分析/生成") 读取和写入 JSON 内容作为离散事件。
-
org.codehaus.jackson.JsonParser 读, org.codehaus.jackson.JsonGenerator 写。
-
StAX API 的激励。
-
-
树模型 :提供一个 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 种方法的用法如下:
额,直接贴出所有代码吧,该说的都在代码中了
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 等没做研究 }
相关推荐
Jackson是Java领域中广泛使用的JSON处理库,它提供了高效的序列化和反序列化功能,使得Java对象能够轻易地转换为JSON格式,反之亦然。在本"Jackson学习实例"中,我们将深入探讨Jackson库的核心概念、主要功能以及...
在本篇文章中,我们将通过实例来入门Jackson的使用。 一、Jackson库简介 Jackson库的核心组件包括: 1. `Jackson-databind`:提供将Java对象映射到JSON和从JSON反序列化回Java对象的功能。 2. `Jackson-core`:基础...
本实例将详细介绍如何使用Jackson库进行JSON到Java对象的反序列化以及Java对象到JSON的序列化。 首先,我们需要引入Jackson库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
Jackson可以通过`ObjectMapper`实例进行配置,以满足特定需求。例如,设置日期格式,启用或禁用特定的序列化特性,优化性能等: ```java ObjectMapper mapper = new ObjectMapper(); mapper.setDateFormat(new ...
在使用Jackson时,开发者需要注意性能优化,例如通过配置`ObjectMapper`实例的序列化和反序列化设置,以及使用流式API来减少内存消耗。此外,为了防止安全问题,如JSON注入攻击,还需要正确配置和使用Jackson的安全...
7. **Jackson-android**: 特别针对Android平台优化的Jackson库,体积更小,更适合移动设备。 在1.9版本中,Jackson已经具有相当完善的特性和性能,但后续的2.x版本引入了更多的改进和新特性,例如类型安全的POJO...
例如,可以禁用默认的`TypeInfo`写入以减少JSON的大小,或者使用`@JsonCreator`注解来定义构造函数或工厂方法,提高对象实例化的速度。 在提供的文档“Jackson框架,轻易转换JSON.doc”中,可能会详细阐述如何设置...
Jackson还支持其他特性,如类型安全的泛型处理、XML与JSON互转、模块扩展(如处理Joda Time日期时间类型)以及性能优化选项。此外,Jackson也提供了对Java 8新特性的良好支持,例如Optional类和日期时间API。 总结...
对于大型项目,可能还需要考虑线程安全性,以及如何在多线程环境中正确使用ObjectMapper实例。 总之,Jackson 2.2.3是一个强大的JSON处理工具,它为Java开发者提供了全面而高效的JSON操作解决方案。无论是在简单的...
标题中的“基于Java的实例源码-高性能的JSON处理 Jackson.zip”指的是包含了一组使用Jackson库进行JSON操作的Java源代码示例。这些示例可能涵盖了如何高效地解析JSON输入、生成JSON输出以及映射JSON到Java对象等方面...
杰克逊(Jackson)是Java领域中广泛使用的JSON处理库,由 FasterXML 组织维护。这个压缩包包含了Jackson库的三个核心模块:`jackson-annotations-2.2.3`、`jackson-core-2.2.3` 和 `jackson-databind-2.2.3`,它们在...
- **TypeReference**: 用于处理泛型类型的映射问题,帮助Jackson确定复杂类型的实例。 - **@JsonProperty**: 注解用于标记Java对象属性,指示它们应被包括在序列化或反序列化过程中。 - **@JsonInclude**: 控制哪些...
- **性能优化**:Jackson提供了许多性能优化策略,如启用流式处理、使用树模式、缓存序列化实例等,以提高处理大量JSON数据时的效率。 总的来说,Jackson 2.6版本提供了强大而灵活的JSON处理工具,是Java开发者处理...
这是因为Spring 4.x在设计时已经考虑了与Jackson 2.x系列的兼容性,而2.6及以上版本的Jackson修复了许多bug,提供了更多的功能和性能优化,更适合与Spring 4.x配合使用。 2. **Spring MVC集成**:在Spring MVC中,...
使用Jackson时,需要注意的点包括性能优化(如开启流模式、使用`writeValueAsBytes`代替`writeValueAsString`以减少内存消耗)、处理循环引用和避免无限递归等问题。 总之,Jackson是一个强大的JSON处理工具,其...
4. 数据绑定:Jackson的数据绑定机制使它能直接将JSON解析到Java对象的实例,或从对象生成JSON,无需编写额外的代码。这对于构建RESTful API和处理JSON数据的Web服务非常有用。 5. 流式API:除了数据绑定,Jackson...
Jackson是Java领域中广泛使用的库,用于处理JSON和XML数据。它提供了强大的功能,使得Java对象与这些数据格式之间的转换变得简单而高效。在“Jackson的一个简单的Demo”中,我们将探讨如何利用Jackson库进行对象到...
Jackson是Java领域中广泛使用的JSON处理库,它提供了一套高效、灵活的API来解析、生成、转换JSON数据。在给定的压缩包文件"jackson-2.11.0.zip"中,包含了三个核心模块的最新版本,分别是: 1. **jackson-core-...
例如,你可以创建一个`ObjectMapper`实例,然后使用`writeValueAsString()`方法将Java对象转化为JSON字符串,或者使用`readValue()`方法将JSON字符串转化为指定类型的Java对象。 2. **注解支持** Jackson 2.6引入...
Jackson提供了许多性能优化选项,如启用流式处理(Streaming API)以处理大型JSON文档,或者配置`ObjectMapper`实例以减少内存使用和提高速度。 6. **版本更新**: Jackson 2.4.2.0是较早的版本,后续的版本可能...