Jackson - 快速指南
概述
Jackson 是一个简单的基于 java 的库,用于将 java 对象序列化为 JSON,反之亦然。
特征
便于使用。- jackson API 提供了一个高级外观来简化常用用例。
无需创建映射。- jackson API 为大多数要序列化的对象提供默认映射。
表现。- jackson 安静快速,内存占用低,适用于大型对象图或系统。
干净的 JSON。- Jackson 创建了一个干净紧凑的 JSON 结果,易于阅读。
无依赖性。- Jackson 库除了 jdk 之外不需要任何其他库。
开源- Jackson 库是开源的,可以免费使用。
处理JSON的三种方式
Jackson 提供了三种处理 JSON 的替代方法
流 API - 将 JSON 内容作为离散事件读取和写入。JsonParser 读取数据,而 JsonGenerator 写入数据。它是三者中最强大的方法,开销最低,读/写操作速度最快。它类似于 XML 的 Stax 解析器。
树模型- 准备 JSON 文档的内存中树表示。ObjectMapper 构建 JsonNode 节点树。这是最灵活的方法。它类似于 XML 的 DOM 解析器。
数据绑定- 使用属性访问器或使用注释将 JSON 与 POJO(普通旧 Java 对象)相互转换。它有两种类型。
简单数据绑定- 将 JSON 与 Java 映射、列表、字符串、数字、布尔值和空对象相互转换。
完整数据绑定- 将 JSON 与任何 JAVA 类型相互转换。
环境设置
在线尝试选项
您确实不需要设置自己的环境来开始学习 Guava(一个基于 JAVA 的库)。原因很简单,我们已经在线设置了Java编程环境,以便您在进行理论工作的同时可以在线编译和执行所有可用的示例。这使您对所阅读的内容充满信心,并使用不同的选项检查结果。请随意修改任何示例并在线执行。
使用以下示例代码框右上角的Try it选项尝试以下示例:
公共类 MyFirstJavaProgram { 公共静态无效主(字符串[]args){ System.out.println("你好世界"); } }对于本教程中给出的大多数示例,您都会找到尝试选项,因此只需使用它并享受学习的乐趣。
本地环境设置
如果您仍然愿意为 Java 编程语言设置环境,那么本节将指导您如何在计算机上下载和设置 Java。请按照以下步骤设置环境。
Java SE 可以通过下载 Java链接免费获得。因此,您可以根据您的操作系统下载一个版本。
按照说明下载 java 并运行 .exe以在您的计算机上安装 Java。在计算机上安装 Java 后,您需要设置环境变量以指向正确的安装目录:
设置 Windows 2000/XP 的路径:
假设您已将 Java 安装在c:\Program Files\java\jdk目录中:
右键单击“我的电脑”并选择“属性”。
单击“高级”选项卡下的“环境变量”按钮。
现在,更改“Path”变量,使其也包含 Java 可执行文件的路径。例如,如果路径当前设置为“C:\WINDOWS\SYSTEM32”,则将路径更改为“C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin”。
设置 Windows 95/98/ME 的路径:
假设您已将 Java 安装在c:\Program Files\java\jdk目录中:
编辑“C:\autoexec.bat”文件并在末尾添加以下行:
“SET PATH=%PATH%;C:\Program Files\java\jdk\bin”
设置 Linux、UNIX、Solaris、FreeBSD 的路径:
应将环境变量 PATH 设置为指向 Java 二进制文件的安装位置。如果您在执行此操作时遇到问题,请参阅您的 shell 文档。
例如,如果您使用bash作为 shell,那么您可以将以下行添加到 '.bashrc:export PATH=/path/to/java:$PATH' 的末尾
流行的 Java 编辑器:
要编写 Java 程序,您需要一个文本编辑器。市场上还有更复杂的 IDE。但目前,您可以考虑以下其中一项:
记事本:在 Windows 计算机上,您可以使用任何简单的文本编辑器,例如记事本(本教程推荐)、TextPad。
Netbeans:是一个开源且免费的 Java IDE,可以从http://www.netbeans.org/index.html下载。
Eclipse:也是由eclipse开源社区开发的Java IDE,可以从http://www.eclipse.org/下载。
下载Jackson档案
从Maven Repository - Jackson下载最新版本的 Jackson jar 文件。在本教程中,下载 jackson-core-2.8.9.jar、jackson-annotations-2.8.9.jar 和 jackson-databind-2.8.9.jar 并将其复制到 C:\> jackson 文件夹中。
操作系统 | 档案名称 |
---|---|
Windows | Jackson-xxx-2.8.9.jar |
Linux | Jackson-xxx-2.8.9.jar |
苹果 | Jackson-xxx-2.8.9.jar |
设置Jackson环境
设置jackson_HOME环境变量以指向计算机上存储 Guava jar 的基本目录位置。假设我们在各种操作系统上的 jackson 文件夹中提取了 jackson-core-2.8.9.jar、jackson-annotations-2.8.9.jar 和 jackson-databind-2.8.9.jar,如下所示。
操作系统 | 输出 |
---|---|
Windows | 将环境变量 jackson_HOME 设置为 C:\jackson |
Linux | 导出 jackson_HOME=/usr/local/jackson |
苹果 | 导出 jackson_HOME=/库/jackson |
设置 CLASSPATH 变量
设置CLASSPATH环境变量以指向 jackson jar 位置。假设我们在各种操作系统上将 jackson-core-2.8.9.jar、jackson-annotations-2.8.9.jar 和 jackson-databind-2.8.9.jar 存储在 jackson 文件夹中,如下所示。
操作系统 | 输出 |
---|---|
Windows | 将环境变量 CLASSPATH 设置为 %CLASSPATH%;%jackson_HOME%\jackson-core-2.8.9.jar;%jackson_HOME%\jackson-databind-2.8.9.jar;%jackson_HOME%\jackson-annotations-2.8.9。罐;。; |
Linux | 导出 CLASSPATH=$CLASSPATH:$jackson_HOME/jackson-core-2.8.9.jar:$jackson_HOME/jackson-databind-2.8.9.jar:$jackson_HOME/jackson-annotations-2.8.9.jar:。 |
苹果 | 导出 CLASSPATH=$CLASSPATH:$jackson_HOME/jackson-core-2.8.9.jar:$jackson_HOME/jackson-databind-2.8.9.jar:$jackson_HOME/jackson-annotations-2.8.9.jar:。 |
首次申请
在详细介绍 Jackson 库之前,让我们先看看一个正在运行的应用程序。在此示例中,我们创建了 Student 类。我们将创建一个包含学生详细信息的 JSON 字符串,并将其反序列化为学生对象,然后将其序列化为 JSON 字符串。
在C:\>Jackson_WORKSPACE中创建一个名为 JacksonTester 的 java 类文件。
文件:JacksonTester.java
导入java.io.IOException; 导入 com.fasterxml.jackson.core.JsonParseException; 导入 com.fasterxml.jackson.databind.JsonMappingException; 导入 com.fasterxml.jackson.databind.ObjectMapper; 公共类 JacksonTester { 公共静态无效主(字符串参数[]){ ObjectMapper 映射器 = new ObjectMapper(); String jsonString = "{\"姓名\":\"Mahesh\", \"年龄\":21}"; //将json映射到学生 尝试{ 学生student = mapper.readValue(jsonString, Student.class); System.out.println(学生); jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace();} catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 班级学生{ 私有字符串名称; 私有整数年龄; 公共学生(){} 公共字符串 getName() { 返回名称; } 公共无效setName(字符串名称){ this.name = 名称; } 公共 int getAge() { 返回年龄; } 公共无效setAge(int年龄){ this.age = 年龄; } 公共字符串 toString(){ return "学生[姓名:"+姓名+",年龄:"+年龄+"]"; } }
验证结果
使用javac编译器编译类,如下所示:
C:\Jackson_WORKSPACE>javac JacksonTester.java
现在运行 jacksonTester 查看结果:
C:\Jackson_WORKSPACE>java JacksonTester
验证输出
Student [ name: Mahesh, age: 21 ] { "name" : "Mahesh", "age" : 21 }
需要记住的步骤
以下是此处需要考虑的重要步骤。
步骤1:创建ObjectMapper对象。
创建 ObjectMapper 对象。它是一个可重复使用的对象。
ObjectMapper mapper = new ObjectMapper();
第 2 步:将 JSON 反序列化为对象。
使用 readValue() 方法从 JSON 中获取对象。传递 json 字符串/ json 字符串的源和对象类型作为参数。
//Object to JSON Conversion Student student = mapper.readValue(jsonString, Student.class);
步骤 3:将对象序列化为 JSON。
使用 writeValueAsString() 方法获取对象的 JSON 字符串表示形式。
//Object to JSON Conversion jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student);
对象映射器类
ObjectMapper 是 Jackson 库的主要参与者类。ObjectMapper 类 ObjectMapper 提供了在基本 POJO(普通旧 Java 对象)之间或从通用 JSON 树模型 (JsonNode) 之间读取和写入 JSON 的功能,以及用于执行转换的相关功能。它还具有高度可定制性,可以处理不同样式的 JSON 内容,并支持更高级的对象概念,例如多态性和对象标识。ObjectMapper 还充当更高级的 ObjectReader 和 ObjectWriter 类的工厂。
类别声明
以下是com.fasterxml.jackson.databind.ObjectMapper类的声明-
public class ObjectMapper extends ObjectCodec implements Versioned, Serializable
嵌套类
编号 | 类别和描述 |
---|---|
1 | 静态类 ObjectMapper.DefaultTypeResolverBuilder
定制的 TypeResolverBuilder 提供与所谓的“默认类型”一起使用的类型解析器构建器(有关详细信息,请参阅enableDefaultTyping())。 |
2 | 静态类 ObjectMapper.DefaultTyping
与enableDefaultTyping() 一起使用的枚举来指定应使用默认类型的类型(类)。 |
领域
protected DeserializationConfig _deserializationConfig - 定义序列化过程的基本全局设置的配置对象。
protected DefaultDeserializationContext _deserializationContext - 蓝图上下文对象;存储在这里以允许自定义子类。
protected InjectableValues _injectableValues - 提供在反序列化 POJO 中注入的值。
protected JsonFactory _jsonFactory - 用于根据需要创建 JsonParser 和 JsonGenerator 实例的工厂。
protected SimpleMixInResolver _mixIns - 定义如何应用混合注释的映射:键是接收附加注释的类型,值是具有“混合”注释的类型。
protected ConfigOverrides _propertyOverrides - 当前活动的每类型配置覆盖,通过声明的属性类型访问。
protected Set<Object> _registeredModuleTypes - 模块类型集(根据已注册的 Module.getTypeId() ;跟踪 iff MapperFeature.IGNORE_DUPLICATE_MODULE_REGISTRATIONS 已启用,以便可以忽略重复的注册调用(以避免多次添加相同的处理程序) ,主要是)。
protected ConcurrentHashMap<JavaType,JsonDeserializer<Object>> _rootDeserializers - 我们将使用单独的主级 Map 来跟踪根级反序列化器。
protected SerializationConfig _serializationConfig - 定义序列化过程的基本全局设置的配置对象。
protected SerializerFactory _serializerFactory - 用于构造序列化器的序列化器工厂。
protected DefaultSerializerProvider _serializerProvider - 管理对用于序列化的序列化程序的访问的对象,包括缓存。
protected SubtypeResolver _subtypeResolver - 用于注册子类型,根据需要将它们解析为超级/子类型。
protected TypeFactory _typeFactory - 用于创建 JavaType 实例的特定工厂;需要允许模块添加更多自定义类型处理(主要是为了支持非 Java JVM 语言的类型)。
protected static AnnotationIntrospector DEFAULT_ANNOTATION_INTROSPECTOR
protected static BaseSettings DEFAULT_BASE - 基本设置包含用于所有 ObjectMapper 实例的默认值。
protected static VisibilityChecker<?> STD_VISIBILITY_CHECKER
构造函数
编号 | 构造函数及描述 |
---|---|
1 | 对象映射器() 默认构造函数,将根据需要构造默认的 JsonFactory,使用 SerializerProvider 作为其 SerializerProvider,使用 BeanSerializerFactory 作为其 SerializerFactory。 |
2 | 对象映射器(JsonFactory jf) 构造使用指定 JsonFactory 来构造必要的 JsonParsers 和/或 JsonGenerators 的实例。 |
3 | ObjectMapper(JsonFactory jf,SerializerProvider sp,DeserializerProvider dp) 构造实例,该实例使用指定的 JsonFactory 来构造必要的 JsonParsers 和/或 JsonGenerators,并使用给定的提供程序来访问序列化器和反序列化器。 |
4 | 受保护的ObjectMapper(ObjectMapper src) 复制构造函数,主要用于支持copy()。 |
方法
1 | protected void _checkInvalidCopy(Class<?> exp) |
2 | protected void _configAndWriteValue(JsonGenerator g, Object value) - 调用方法以根据需要配置生成器,然后调用写入功能 |
3 | protected Object _convert(Object fromValue, JavaType toValueType) - 实际转换实现:大部分代码是内联的,而不是使用现有的读写方法。 |
4 | protected JsonDeserializer<Object> _findRootDeserializer(DeserializationContext ctxt, JavaType valueType) - 调用该方法来查找传递的根级别值的反序列化器。 |
5 | protected JsonToken _initForReading(JsonParser p) - 调用方法以确保给定的解析器已准备好读取数据绑定的内容。 |
6 | protected ObjectReader _newReader(DeserializationConfig config) - 工厂方法子类必须重写,以生成正确子类型的 ObjectReader 实例 |
7 | protected ObjectReader _newReader(DeserializationConfig config, JavaType valueType, Object valueToUpdate, FormatSchema schema, InjectableValuesjectableValues) - 工厂方法子类必须重写,以生成正确子类型的 ObjectReader 实例 |
8 | protected ObjectWriter _newWriter(SerializationConfig config) - 工厂方法子类必须重写,以生成正确子类型的 ObjectWriter 实例 |
9 | protected ObjectWriter _newWriter(SerializationConfig config, FormatSchema schema) - 工厂方法子类必须重写,以生成正确子类型的 ObjectWriter 实例 |
10 | protected ObjectWriter _newWriter(SerializationConfig config, JavaType rootType, PrettyPrinter pp) - 工厂方法子类必须重写,以生成正确子类型的 ObjectWriter 实例。 |
11 | protected Object _readMapAndClose(JsonParser p0, JavaType valueType) |
12 | protected Object _readValue(DeserializationConfig cfg, JsonParser p, JavaType valueType) - 值读取+绑定操作的实际实现。 |
13 | 受保护的 DefaultSerializerProvider _serializerProvider(SerializationConfig 配置) |
14 | 受保护的对象_unwrapAndDeserialize(JsonParser p,DeserializationContext ctxt,DeserializationConfig config,JavaType rootType,JsonDeserializer <Object> deser) |
15 | protected void _verifySchemaType(FormatSchema 架构) |
16 | void AcceptJsonFormatVisitor(Class<?> type, JsonFormatVisitorWrapper guest) - 使用指定访问者访问给定类型的类型层次结构的方法。 |
17 号 | void AcceptJsonFormatVisitor(JavaType type, JsonFormatVisitorWrapper Visitor) - 使用指定访问者访问给定类型的类型层次结构的方法。 |
18 | ObjectMapper addHandler(DeserializationProblemHandler h) - 添加指定的 DeserializationProblemHandler 的方法,用于在反序列化期间处理特定问题。 |
19 | ObjectMapper addMixIn(Class<?> target, Class<?> mixinSource) - 用于添加混合注释以用于增强指定类或接口的方法。 |
20 | boolean canDeserialize(JavaType type) - 可以调用该方法来检查映射器是否认为它可以反序列化给定类型的对象。 |
21 | boolean canDeserialize(JavaType type, AtomicReference<Throwable> Cause) - 与 canDeserialize(JavaType) 类似的方法,但可以返回尝试构造序列化器时抛出的实际 Throwable:这可能有助于找出实际问题是什么。 |
22 | boolean canSerialize(Class<?> type) - 可以调用该方法来检查映射器是否认为它可以序列化给定类的实例。 |
23 | boolean canSerialize(Class<?> type, AtomicReference<Throwable> Cause) - 与 canSerialize(Class) 类似的方法,但可以返回尝试构造序列化器时抛出的实际 Throwable:这可能有助于找出实际问题是什么。 |
24 | ObjectMapper clearProblemHandlers() - 从此映射器中删除所有注册的 DeserializationProblemHandlers 实例的方法。 |
25 | MutableConfigOverride configOverride(Classlt;?> type) - 用于获取给定类型的可变配置覆盖对象的访问器,需要添加或更改应用于给定类型的属性的每个类型覆盖。 |
26 | ObjectMapper configure(DeserializationFeature f, boolean state) - 用于更改此对象映射器的开/关反序列化功能状态的方法。 |
27 | ObjectMapper configure(JsonGenerator.Feature f, boolean state) - 用于更改此对象映射器创建的生成器实例的开/关 JsonGenerator 功能状态的方法。 |
28 | ObjectMapper configure(JsonParser.Feature f, boolean state) - 用于更改此对象映射器创建的解析器实例的指定 JsonParser.Features 状态的方法。 |
29 | ObjectMapper configure(MapperFeature f, boolean state) - 用于更改此映射器实例的开/关映射器功能状态的方法。 |
30 | ObjectMapper configure(SerializationFeature f, boolean state) - 用于更改此对象映射器的开/关序列化功能状态的方法。 |
31 | JavaType ConstructionType(Type t) - 从给定类型(通常是 java.lang.Class)构造 JavaType 的便捷方法,但没有显式上下文。 |
32 | <T> T ConvertValue(Object fromValue, Class<T> toValueType) - 如果(但仅当!)需要转换,则从给定值执行两步转换为给定值类型实例的便捷方法。 |
33 | <T> T ConvertValue(Object fromValue, JavaType toValueType) - 请参阅 ConvertValue(Object, Class) |
34 | <T> T ConvertValue(Object fromValue, TypeReference<?> toValueTypeRef) - 请参阅 ConvertValue(Object, Class) |
35 | ObjectMapper copy() - 用于创建与此实例具有相同初始配置的新 ObjectMapper 实例的方法。 |
36 | ArrayNode createArrayNode() - 注意:返回类型是协变的,因为基本的 ObjectCodec 抽象不能引用具体的节点类型(因为它是核心包的一部分,而 impls 是映射器包的一部分) |
37 | ObjectNode createObjectNode() - 注意:返回类型是协变的,因为基本的 ObjectCodec 抽象不能引用具体的节点类型(因为它是核心包的一部分,而 impls 是映射器包的一部分) |
38 | protected ClassIntrospector defaultClassIntrospector() - 用于构造要使用的默认 ClassIntrospector 的可重写帮助器方法。 |
39 | ObjectMapper disable(DeserializationFeature feature) - 启用指定 DeserializationConfig 功能的方法。 |
40 | ObjectMapper disable(DeserializationFeature first, DeserializationFeature... f) - 启用指定 DeserializationConfig 功能的方法。 |
41 | ObjectMapper disable(JsonGenerator.Feature... features) - 禁用此对象映射器创建的解析器实例的指定 JsonGenerator.Features 的方法。 |
42 | ObjectMapper disable(JsonParser.Feature... features) - 禁用此对象映射器创建的解析器实例的指定 JsonParser.Features 的方法。 |
43 | ObjectMapper disable(MapperFeature... f) - 启用指定 DeserializationConfig 功能的方法。 |
44 | ObjectMapper disable(SerializationFeature f) - 启用指定 DeserializationConfig 功能的方法。 |
45 | ObjectMapper disable(SerializationFeature first, SerializationFeature... f) - 启用指定 DeserializationConfig 功能的方法。 |
46 | ObjectMapper disableDefaultTyping() - 禁用自动包含类型信息的方法;如果是这样,则只有显式注释的类型(具有 JsonTypeInfo 的类型)才会具有附加的嵌入类型信息。 |
47 | ObjectMapper enable(DeserializationFeature feature) - 启用指定 DeserializationConfig 功能的方法。 |
48 | ObjectMapper enable(DeserializationFeature first, DeserializationFeature... f) - 启用指定 DeserializationConfig 功能的方法。 |
49 | ObjectMapper enable(JsonGenerator.Feature... features) - 为该对象映射器创建的解析器实例启用指定的 JsonGenerator.Features 的方法。 |
50 | ObjectMapper enable(JsonParser.Feature... features) - 为该对象映射器创建的解析器实例启用指定的 JsonParser.Features 的方法。 |
51 | ObjectMapper enable(MapperFeature... f) - 启用指定 MapperConfig 功能的方法。 |
52 | ObjectMapper enable(SerializationFeature f) - 启用指定 DeserializationConfig 功能的方法。 |
53 | ObjectMapper enable(SerializationFeature first, SerializationFeature... f) - 启用指定 DeserializationConfig 功能的方法。 |
54 | ObjectMapper enableDefaultTyping() - 相当于调用的便捷方法 |
55 | ObjectMapper enableDefaultTyping(ObjectMapper.DefaultTyping dti) - 相当于调用的便捷方法 |
56 | ObjectMapper enableDefaultTyping(ObjectMapper.DefaultTyping applicability, JsonTypeInfo.As includeAs) - 启用自动包含类型信息的方法,需要正确反序列化多态类型(除非已使用 JsonTypeInfo 注释类型)。 |
57 | ObjectMapper enableDefaultTypingAsProperty(ObjectMapper.DefaultTyping applicability, String propertyName) - 启用自动包含类型信息的方法 - 正确反序列化多态类型所需的(除非类型已用 JsonTypeInfo 注释) - 使用“As.PROPERTY”包含机制并指定用于包含的属性名称(默认为“@class”,因为默认类型信息始终使用类名称作为类型标识符) |
58 | ObjectMapper findAndRegisterModules() - 功能上等效于的便捷方法:mapper.registerModules(mapper.findModules()); |
59 | 类<?> findMixInClassFor(类<?> cls) |
60 | static List<Module> findModules() - 使用 JDK ServiceLoader 工具以及模块提供的 SPI 来查找可用方法的方法。 |
61 | static List<Module> findModules(ClassLoader classLoader) - 使用 JDK ServiceLoader 工具以及模块提供的 SPI 来查找可用方法的方法。 |
62 | 日期格式 getDateFormat() |
63 | DeserializationConfig getDeserializationConfig() - 返回定义反序列化配置设置的共享默认 DeserializationConfig 对象的方法。 |
64 | DeserializationContext getDeserializationContext() - 获取当前 DeserializationContext 的方法。 |
65 | JsonFactory getFactory() - 可用于获取此映射器在需要构造 JsonParsers 和/或 JsonGenerators 时使用的 JsonFactory 的方法。 |
66 | InjectableValues getInjectableValues() |
67 | JsonFactory getJsonFactory() - 已弃用。从 2.1 开始:使用 getFactory() 代替 |
68 | JsonNodeFactory getNodeFactory() - 可用于获取此映射器在直接构造树的根 JsonNode 实例时将使用的 JsonNodeFactory 的方法。 |
69 | PropertyNamingStrategy getPropertyNamingStrategy() |
70 | SerializationConfig getSerializationConfig() - 返回定义序列化配置设置的共享默认 SerializationConfig 对象的方法。 |
71 | SerializerFactory getSerializerFactory() - 获取当前 SerializerFactory 的方法。 |
72 | SerializerProvider getSerializerProvider() - “蓝图”(或工厂)实例的访问器,通过调用 DefaultSerializerProvider.createInstance(com.fasterxml.jackson.databind.SerializationConfig, com.fasterxml.jackson.databind.ser.SerializerFactory 从该实例创建实例)。 |
73 | SerializerProvider getSerializerProviderInstance() - 用于构造和返回可用于访问序列化器的 SerializerProvider 实例的访问器。 |
74 | SubtypeResolver getSubtypeResolver() - 用于访问正在使用的子类型解析器的方法。 |
75 | TypeFactory getTypeFactory() - 用于获取当前配置的 TypeFactory 实例的访问器。 |
76 | VisibilityChecker<?> getVisibilityChecker() - 访问当前配置的可见性检查器的方法;用于确定给定属性元素(方法、字段、构造函数)是否可以自动检测的对象。 |
77 | boolean isEnabled(DeserializationFeature f) - 检查是否启用给定反序列化特定功能的方法。 |
78 | boolean isEnabled(JsonFactory.Feature f) - 便捷方法,相当于: |
79 | boolean isEnabled(JsonGenerator.Feature f) |
80 | boolean isEnabled(JsonParser.Feature f) |
81 | boolean isEnabled(MapperFeature f) - 检查是否启用给定 MapperFeature 的方法。 |
82 | boolean isEnabled(SerializationFeature f) - 检查是否启用给定序列化特定功能的方法。 |
83 | int mixInCount() |
84 | ObjectReader reader() - 使用默认设置构造 ObjectReader 的工厂方法。 |
85 | ObjectReader reader(Base64Variant defaultBase64) - 用于构造 ObjectReader 的工厂方法,它将使用指定的 Base64 编码变体来处理 Base64 编码的二进制数据。 |
86 | ObjectReader reader(Class<?> type) - 已弃用。从 2.5 开始,使用 readerFor(Class) 代替 |
87 | ObjectReader reader(ContextAttributes attrs) - 用于构造将使用指定默认属性的 ObjectReader 的工厂方法。 |
88 | ObjectReader reader(DeserializationFeature feature) - 用于构造启用指定功能的 ObjectReader 的工厂方法(与此映射器实例具有的设置相比)。 |
89 | ObjectReader reader(DeserializationFeature first, DeserializationFeature... other) - 用于构造启用指定功能的 ObjectReader 的工厂方法(与此映射器实例具有的设置相比)。 |
90 | ObjectReader reader(FormatSchema schema) - 用于构造 ObjectReader 的工厂方法,它将特定的架构对象传递给用于读取内容的 JsonParser。 |
91 | ObjectReader reader(InjectableValuesinjectableValues) - 用于构造将使用指定可注入值的 ObjectReader 的工厂方法。 |
92 | ObjectReader 阅读器(JavaType 类型) - 已弃用。从 2.5 开始,使用 readerFor(JavaType) 代替 |
93 | ObjectReader reader(JsonNodeFactory f) - 用于构造 ObjectReader 的工厂方法,该方法将使用指定的 JsonNodeFactory 来构造 JSON 树。 |
94 | ObjectReader reader(TypeReference<?> type) - 已弃用。从 2.5 开始,使用 readerFor(TypeReference) 代替 |
95 | ObjectReader readerFor(Class<?> type) - 用于构造将读取或更新指定类型的实例的 ObjectReader 的工厂方法 |
96 | ObjectReader readerFor(JavaType type) - 用于构造将读取或更新指定类型的实例的 ObjectReader 的工厂方法 |
97 | ObjectReader readerFor(TypeReference<?> type) - 用于构造将读取或更新指定类型的实例的 ObjectReader 的工厂方法 |
98 | ObjectReader readerForUpdating(Object valueToUpdate) - 用于构造 ObjectReader 的工厂方法,该方法将使用 JSON 数据更新给定的对象(通常是 Bean,但也可以是 Collection 或 Map,但不是数组)。 |
99 | ObjectReader readerWithView(Class<?> view) - 用于构造 ObjectReader 的工厂方法,该方法将使用指定的 JSON 视图(过滤器)反序列化对象。 |
100 | JsonNode readTree(byte[] content) - 将 JSON 内容反序列化为使用 JsonNode 实例集表示的树的方法。 |
101 | JsonNode readTree(File file) - 将 JSON 内容反序列化为使用 JsonNode 实例集表示的树的方法。 |
102 | JsonNode readTree(InputStream in) - 将 JSON 内容反序列化为使用 JsonNode 实例集表示的树的方法。 |
103 | <T extends TreeNode> T readTree(JsonParser p) - 将 JSON 内容反序列化为使用 JsonNode 实例集表示的树的方法。 |
104 | JsonNode readTree(Reader r) - 将 JSON 内容反序列化为使用 JsonNode 实例集表示的树的方法。 |
105 | JsonNode readTree(String content) - 将 JSON 内容反序列化为使用 JsonNode 实例集表示的树的方法。 |
106 | JsonNode readTree(URL source) - 将 JSON 内容反序列化为使用 JsonNode 实例集表示的树的方法。 |
107 | <T> T readValue(byte[] src, Class<T> valueType) |
108 | <T> T readValue(byte[] src, int offset, int len, Class<T> valueType) |
109 | <T> T readValue(byte[] src, int offset, int len, JavaType valueType) |
110 | <T> T readValue(byte[] src, int offset, int len, TypeReference valueTypeRef) |
111 | <T> T readValue(byte[] src, JavaType valueType) |
112 | <T> T readValue(byte[] src, TypeReference valueTypeRef) |
113 | <T> T readValue(DataInput src, Class<T> valueType) |
114 | <T> T readValue(DataInput src, JavaType valueType) |
115 | <T> T readValue(File src, Class<T> valueType) - 将给定文件中的 JSON 内容反序列化为给定 Java 类型的方法。 |
116 | <T> T readValue(File src, JavaType valueType) - 将给定文件中的 JSON 内容反序列化为给定 Java 类型的方法。 |
117 | <T> T readValue(File src, TypeReference valueTypeRef) - 将给定文件中的 JSON 内容反序列化为给定 Java 类型的方法。 |
118 | <T> T readValue(InputStream src, Class<T> valueType) |
119 | <T> T readValue(InputStream src, JavaType valueType) |
120 | <T> T readValue(InputStream src, TypeReference valueTypeRef) |
121 | <T> T readValue(JsonParser p, Class<T> valueType) - 将 JSON 内容反序列化为非容器类型的方法(但是它可以是数组类型):通常是 bean、数组或包装类型(如 Boolean )。 |
122 | <T> T readValue(JsonParser p, JavaType valueType) - 类型安全重载方法,基本上是 readValue(JsonParser, Class) 的别名。 |
123 | <T> T readValue(JsonParser p, ResolvedType valueType) - 将 JSON 内容反序列化为 Java 类型的方法,对其的引用作为参数传递。 |
124 | <T> T readValue(JsonParser p, TypeReference<?> valueTypeRef) - 将 JSON 内容反序列化为 Java 类型的方法,对其的引用作为参数传递。 |
125 | <T> T readValue(Reader src, Class<T> valueType) - |
1 | <T> T readValue(Reader src, JavaType valueType) |
126 | <T> T readValue(Reader src, TypeReference valueTypeRef) |
127 | <T> T readValue(String content, Class<T> valueType) - 从给定 JSON 内容字符串反序列化 JSON 内容的方法。 |
128 | <T> T readValue(String content, JavaType valueType) - 从给定 JSON 内容字符串反序列化 JSON 内容的方法。 |
129 | <T> T readValue(String content, TypeReference valueTypeRef) - 从给定 JSON 内容字符串反序列化 JSON 内容的方法。 |
130 | <T> T readValue(URL src, Class<T> valueType) - 将给定资源中的 JSON 内容反序列化为给定 Java 类型的方法。 |
131 | <T> T readValue(URL src, JavaType valueType) |
132 | <T> T readValue(URL src, TypeReference valueTypeRef) - 将给定资源中的 JSON 内容反序列化为给定 Java 类型的方法。 |
133 | <T> MappingIterator<T> readValues(JsonParser p, Class<T> valueType) - 便捷方法,功能相当于: |
134 | <T> MappingIterator<T> readValues(JsonParser p, JavaType valueType) - 便捷方法,功能相当于: |
135 | <T> MappingIterator<T> readValues(JsonParser p, ResolvedType valueType) - 便捷方法,功能相当于: |
136 | <T> MappingIterator<T> readValues(JsonParser p, TypeReference<?>valueTypeRef) - 从解析器流读取对象序列的方法。 |
137 | ObjectMapper registerModule(Module module) - 注册可以扩展此映射器提供的功能的模块的方法;例如,通过添加自定义序列化器和反序列化器的提供程序。 |
138 | ObjectMapper registerModules(Iterable<Module>modules) - 按顺序注册指定模块的便捷方法;功能上等同于: |
139 | ObjectMapper registerModules(Module...modules) - 按顺序注册指定模块的便捷方法;功能上等同于: |
140 | void registerSubtypes(NamedType... types) - 将指定类注册为子类型的方法,以便基于类型名的解析可以将超类型链接到子类型(作为使用注释的替代方法)。 |
141 | ObjectMapper setAnnotationIntrospector(AnnotationIntrospector ai) - 设置此映射器实例用于序列化和反序列化的 AnnotationIntrospector 的方法。 |
142 | ObjectMapper setAnnotationIntrospectors(AnnotationIntrospector serializerAI, AnnotationIntrospector deserializerAI) - 更改此映射器实例用于序列化和反序列化的 AnnotationIntrospector 实例的方法,分别指定它们,以便不同的方面可以使用不同的内省。 |
143 | ObjectMapper setBase64Variant(Base64Variant v) - 配置 byte[] 序列化器和反序列化器将使用的默认 Base64Variant 的方法。 |
144 | ObjectMapper setConfig(DeserializationConfig config) - 允许重写底层 DeserializationConfig 对象的方法。 |
145 | ObjectMapper setConfig(SerializationConfig config) - 允许重写底层 SerializationConfig 对象的方法,其中包含特定于序列化的配置设置。 |
146 | ObjectMapper setDateFormat(DateFormat dateFormat) - 用于配置将时间值序列化为字符串以及从 JSON 字符串反序列化时使用的默认 DateFormat 的方法。 |
147 | ObjectMapper setDefaultPrettyPrinter(PrettyPrinter pp) - 启用“默认漂亮打印”时指定要使用的 PrettyPrinter 的方法(通过启用 SerializationFeature.INDENT_OUTPUT) |
148 | ObjectMapper setDefaultTyping(TypeResolverBuilder<?> typer) - 用于启用自动包含类型信息的方法,使用指定的处理程序对象来确定这会影响哪些类型,以及如何嵌入信息的详细信息。 |
149 | ObjectMapper setFilterProvider(FilterProvider filterProvider) - 用于配置此映射器以使用指定 FilterProvider 将过滤器 ID 映射到实际过滤器实例的方法。 |
150 | Object setHandlerInstantiator(HandlerInstantiator hi) - 在给定类的情况下,配置 HandlerInstantiator 以用于创建处理程序实例(例如序列化器、反序列化器、类型和类型 id 解析器)的方法。 |
151 | ObjectMapper setInjectableValues(InjectableValuesinjectableValues) - 配置 InjectableValues 的方法,用于查找要注入的值。 |
152 | ObjectMapper setLocale(Locale l) - 覆盖用于格式化的默认区域设置的方法。 |
153 | void setMixInAnnotations(Map<Class<?>,Class<?>> sourceMixins) - 已弃用。自2.5起:被该方法的流畅形式取代;setMixIns(java.util.Map<java.lang.Class<?>, java.lang.Class<?>>). |
154 | ObjectMapper setMixInResolver(ClassIntrospector.MixInResolver resolver) - 可以调用该方法来指定给定解析器,以定位要使用的混合类,覆盖直接添加的映射。 |
155 | ObjectMapper setMixIns(Map<Class<?>,Class<?>> sourceMixins) - 用于定义混合注释以用于增强可处理(可序列化/可反序列化)类所具有的注释的方法。 |
156 | ObjectMapper setNodeFactory(JsonNodeFactory f) - 指定用于构造根级树节点的 JsonNodeFactory 的方法(通过方法 createObjectNode() |
157 | ObjectMapper setPropertyInclusion(JsonInclude.Value incl) - 设置默认 POJO 属性包含策略以进行序列化的方法。 |
158 | ObjectMapper setPropertyNamingStrategy(PropertyNamingStrategy s) - 设置要使用的自定义属性命名策略的方法。 |
159 | ObjectMapper setSerializationInclusion(JsonInclude.Include incl) - 便捷方法,相当于调用: |
160 | ObjectMapper setSerializerFactory(SerializerFactory f) - 设置用于构造(bean)序列化器的特定 SerializerFactory 的方法。 |
161 | ObjectMapper setSerializerProvider(DefaultSerializerProvider p) - 设置“蓝图”SerializerProvider 实例的方法,用作实际提供程序实例的基础,以用于处理 JsonSerializer 实例的缓存。 |
162 | ObjectMapper setSubtypeResolver(SubtypeResolver str) - 设置要使用的自定义子类型解析器的方法。 |
163 | ObjectMapper setTimeZone(TimeZone tz) - 覆盖用于格式化的默认时区的方法。 |
164 | ObjectMapper setTypeFactory(TypeFactory f) - 可用于覆盖此映射器使用的 TypeFactory 实例的方法。 |
165 | ObjectMapper setVisibility(PropertyAccessor forMethod, JsonAutoDetect.Visibilityvisibility) - 方便的方法,允许更改底层 VisibilityCheckers 的配置,以更改自动检测的属性类型的详细信息。 |
166 | ObjectMapper setVisibility(VisibilityChecker<?> vc) - 设置当前配置的 VisibilityChecker 的方法,用于确定给定属性元素(方法、字段、构造函数)是否可以自动检测的对象。 |
167 | void setVisibilityChecker(VisibilityChecker<?> vc) - 已弃用。从 2.6 开始使用 setVisibility(VisibilityChecker) 代替。 |
168 | JsonParser treeAsTokens(TreeNode n) - 根据 JSON 树表示构造 JsonParser 的方法。 |
169 | <T> T treeToValue(TreeNode n, Class<T> valueType) - 便捷的转换方法,将给定 JSON 树包含的数据绑定到特定值(通常是 bean)类型。 |
170 | <T extends JsonNode> T valueToTree(Object fromValue) - treeToValue(com.fasterxml.jackson.core.TreeNode, java.lang.Class<T>) 的逆向;给定一个值(通常是 bean),将构造等效的 JSON 树表示。 |
171 | Version version() - 将返回存储在包含此类的 jar 中并从中读取的版本信息的方法。 |
172 | ObjectWriter writer() - 使用默认设置构造 ObjectWriter 的便捷方法。 |
173 | ObjectWriter writer(Base64Variant defaultBase64) - 用于构造 ObjectWriter 的工厂方法,它将使用指定的 Base64 编码变体来处理 Base64 编码的二进制数据。 |
174 | ObjectWriter writer(CharacterEscapes 转义) - |
175 | ObjectWriter writer(ContextAttributes attrs) - 用于构造将使用指定默认属性的 ObjectWriter 的工厂方法。 |
176 | ObjectWriter writer(DateFormat df) - 用于构造 ObjectWriter 的工厂方法,该方法将使用指定的 DateFormat 序列化对象;或者,如果传递 null,则使用时间戳(64 位数字。 |
177 | ObjectWriter writer(FilterProvider filterProvider) - 用于构造 ObjectWriter 的工厂方法,该方法将使用指定的过滤器提供程序序列化对象。 |
178 | ObjectWriter writer(FormatSchema schema) - 用于构造 ObjectWriter 的工厂方法,该方法将特定的架构对象传递给用于写入内容的 JsonGenerator。 |
179 | ObjectWriter writer(PrettyPrinter pp) - 用于构造 ObjectWriter 的工厂方法,该方法将使用指定的漂亮打印机进行缩进序列化对象(或者如果为 null,则没有漂亮打印机) |
180 | ObjectWriter writer(SerializationFeature feature) - 用于构造启用指定功能的 ObjectWriter 的工厂方法(与此映射器实例具有的设置相比)。 |
181 | ObjectWriter writer(SerializationFeature first, SerializationFeature... other) - 用于构造启用指定功能的 ObjectWriter 的工厂方法(与此映射器实例具有的设置相比)。 |
182 | ObjectWriter writerFor(Class<?> rootType) - 用于构造 ObjectWriter 的工厂方法,该方法将使用指定的根类型(而不是值的实际运行时类型)序列化对象。 |
183 | ObjectWriter writerFor(JavaType rootType) - 用于构造 ObjectWriter 的工厂方法,该方法将使用指定的根类型(而不是值的实际运行时类型)序列化对象。 |
184 | ObjectWriter writerFor(TypeReference<?> rootType) - 用于构造 ObjectWriter 的工厂方法,该方法将使用指定的根类型(而不是值的实际运行时类型)序列化对象。 |
185 | ObjectWriter writerWithDefaultPrettyPrinter() - 用于构造 ObjectWriter 的工厂方法,该方法将使用默认的漂亮打印机进行缩进序列化对象。 |
186 | ObjectWriter writerWithType(Class<?> rootType) - 已弃用。从 2.5 开始,使用 writerFor(Class) 代替。 |
187 | ObjectWriter writerWithType(JavaType rootType) - 已弃用。从 2.5 开始,改用 writerFor(JavaType)。 |
188 | ObjectWriter writerWithType(TypeReference<?> rootType) - 已弃用。从 2.5 开始,改用 writerFor(TypeReference)。 |
189 | ObjectWriter writerWithView(Class<?> serializationView) - 用于构造 ObjectWriter 的工厂方法,该方法将使用指定的 JSON 视图(过滤器)序列化对象。 |
190 | void writeTree(JsonGenerator jgen, JsonNode rootNode) - 使用提供的生成器序列化给定 JSON 树的方法。 |
191 | void writeTree(JsonGenerator jgen, TreeNode rootNode) |
192 | void writeValue(数据输出,对象值) |
193 | void writeValue(File resultFile, Object value) - 可用于将任何 Java 值序列化为 JSON 输出并写入提供的文件的方法。 |
194 | void writeValue(JsonGenerator g, Object value) - 使用提供的 JsonGenerator 将任何 Java 值序列化为 JSON 输出的方法。 |
195 | void writeValue(OutputStream out, Object value) - 可用于使用提供的输出流(使用编码 JsonEncoding.UTF8)将任何 Java 值序列化为 JSON 输出的方法。 |
196 | void writeValue(Writer w, Object value) - 使用提供的 Writer 将任何 Java 值序列化为 JSON 输出的方法。 |
197 | byte[] writeValueAsBytes(Object value) - 可用于将任何 Java 值序列化为字节数组的方法。 |
198 | String writeValueAsString(Object value) - 可用于将任何 Java 值序列化为字符串的方法。 |
继承的方法
该类继承了以下类的方法:
java.lang.Object
对象映射器示例
使用您选择的任何编辑器在C:/> Jackson_WORKSPACE中创建以下 java 程序
文件:JacksonTester.java
导入java.io.IOException; 导入 com.fasterxml.jackson.core.JsonParseException; 导入 com.fasterxml.jackson.databind.JsonMappingException; 导入 com.fasterxml.jackson.databind.ObjectMapper; 公共类 JacksonTester { 公共静态无效主(字符串参数[]){ ObjectMapper 映射器 = new ObjectMapper(); String jsonString = "{\"姓名\":\"Mahesh\", \"年龄\":21}"; //将json映射到学生 尝试{ 学生student = mapper.readValue(jsonString, Student.class); System.out.println(学生); jsonString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(student); System.out.println(jsonString); } catch (JsonParseException e) { e.printStackTrace();} catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 班级学生{ 私有字符串名称; 私有整数年龄; 公共学生(){} 公共字符串 getName() { 返回名称; } 公共无效setName(字符串名称){ this.name = 名称; } 公共 int getAge() { 返回年龄; } 公共无效setAge(int年龄){ this.age = 年龄; } 公共字符串 toString(){ return "学生[姓名:"+姓名+",年龄:"+年龄+"]"; } }
验证结果
使用javac编译器编译类,如下所示:
C:\Jackson_WORKSPACE>javac JacksonTester.java
现在运行 jacksonTester 查看结果:
C:\Jackson_WORKSPACE>java JacksonTester
验证输出
Student [ name: Mahesh, age: 21 ] { "name" : "Mahesh", "age" : 21 }
对象序列化
让我们将 java 对象序列化为 json 文件,然后读取该 json 文件以获取该对象。在此示例中,我们创建了 Student 类。我们将创建一个 Student.json 文件,其中包含 Student 对象的 json 表示形式。
在C:\>Jackson_WORKSPACE中创建一个名为 JacksonTester 的 java 类文件。
文件:JacksonTester.java
导入java.io.File; 导入java.io.IOException; 导入 com.fasterxml.jackson.core.JsonGenerationException; 导入 com.fasterxml.jackson.core.JsonParseException; 导入 com.fasterxml.jackson.databind.JsonMappingException; 导入 com.fasterxml.jackson.databind.ObjectMapper; 公共类 JacksonTester { 公共静态无效主(字符串参数[]){ JacksonTester 测试器 = new JacksonTester(); 尝试 { 学生学生=新学生(); 学生.setAge(10); 学生.setName("Mahesh"); 测试者.writeJSON(学生); 学生student1 = tester.readJSON(); System.out.println(student1); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 私人无效 writeJSON(学生学生)抛出 JsonGenerationException,JsonMappingException,IOException{ ObjectMapper 映射器 = new ObjectMapper(); mapper.writeValue(new File("student.json"), Student); } 私人学生 readJSON() 抛出 JsonParseException、JsonMappingException、IOException{ ObjectMapper 映射器 = new ObjectMapper(); Student Student = mapper.readValue(new File("student.json"), Student.class); 回国学生; } } 班级学生{ 私有字符串名称; 私有整数年龄; 公共学生(){} 公共字符串 getName() { 返回名称; } 公共无效setName(字符串名称){ this.name = 名称; } 公共 int getAge() { 返回年龄; } 公共无效setAge(int年龄){ this.age = 年龄; } 公共字符串 toString(){ return "学生[姓名:"+姓名+",年龄:"+年龄+"]"; } }
验证结果
使用javac编译器编译类,如下所示:
C:\Jackson_WORKSPACE>javac JacksonTester.java
现在运行 jacksonTester 查看结果:
C:\Jackson_WORKSPACE>java JacksonTester
验证输出
Student [ name: Mahesh, age: 10 ]
数据绑定
数据绑定 API 用于使用属性访问器或使用注释将 JSON 与 POJO(普通旧 Java 对象)相互转换。它有两种类型。
简单数据绑定- 将 JSON 与 Java 映射、列表、字符串、数字、布尔值和空对象相互转换。
完整数据绑定- 将 JSON 与任何 JAVA 类型相互转换。
ObjectMapper 读取/写入两种类型数据绑定的 JSON。数据绑定是最方便的方法,类似于 XML 的 JAXB 解析器。
简单的数据绑定
简单数据绑定是指将 JSON 映射到 JAVA Core 数据类型。下表说明了 JSON 类型与 Java 类型之间的关系。
先生。没有。 | JSON 类型 | Java类型 |
---|---|---|
1 | 目的 | LinkedHashMap<字符串,对象> |
2 | 大批 | 数组列表<对象> |
3 | 细绳 | 细绳 |
4 | 完整号码 | 整数、长整型或大整数 |
5 | 分数 | 双精度/大十进制 |
6 | 真实 | 错误的 | 布尔值 |
7 | 无效的 | 无效的 |
让我们看看简单的数据绑定的实际应用。在这里,我们将 JAVA 基本类型直接映射到 JSON,反之亦然。
在C:\>Jackson_WORKSPACE中创建一个名为 JacksonTester 的 java 类文件。
文件:JacksonTester.java
导入java.io.File; 导入java.io.IOException; 导入java.util.HashMap; 导入java.util.Map; 导入 com.fasterxml.jackson.core.JsonParseException; 导入 com.fasterxml.jackson.databind.JsonMappingException; 导入 com.fasterxml.jackson.databind.ObjectMapper; 公共类 JacksonTester { 公共静态无效主(字符串参数[]){ JacksonTester 测试器 = new JacksonTester(); 尝试 { ObjectMapper 映射器 = new ObjectMapper(); Map<String,Object> StudentDataMap = new HashMap<String,Object>(); int[] 标记 = {1,2,3}; 学生学生=新学生(); 学生.setAge(10); 学生.setName("Mahesh"); // JAVA 对象 StudentDataMap.put("学生", 学生); // JAVA 字符串 StudentDataMap.put("姓名", "Mahesh Kumar"); // JAVA 布尔值 StudentDataMap.put("已验证", Boolean.FALSE); // 大批 StudentDataMap.put("分数", 分数); mapper.writeValue(new File("student.json"), StudentDataMap); //结果student.json //{ // "学生":{"姓名":"马赫什","年龄":10}, // "标记":[1,2,3], //“已验证”:假, //“名称”:“马赫什·库马尔” //} StudentDataMap = mapper.readValue(new File("student.json"), Map.class); System.out.println(studentDataMap.get("学生")); System.out.println(studentDataMap.get("姓名")); System.out.println(studentDataMap.get("已验证")); System.out.println(studentDataMap.get("分数")); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 班级学生{ 私有字符串名称; 私有整数年龄; 公共学生(){} 公共字符串 getName() { 返回名称; } 公共无效setName(字符串名称){ this.name = 名称; } 公共 int getAge() { 返回年龄; } 公共无效setAge(int年龄){ this.age = 年龄; } 公共字符串 toString(){ return "学生[姓名:"+姓名+",年龄:"+年龄+"]"; } }
验证结果
使用javac编译器编译类,如下所示:
C:\Jackson_WORKSPACE>javac JacksonTester.java
现在运行 jacksonTester 查看结果:
C:\Jackson_WORKSPACE>java JacksonTester
验证输出
{name=Mahesh, age=10} Mahesh Kumar false [1, 2, 3]
完整的数据绑定
完整数据绑定是指将 JSON 映射到任何 JAVA 对象。
//Create an ObjectMapper instance ObjectMapper mapper = new ObjectMapper(); //map JSON content to Student object Student student = mapper.readValue(new File("student.json"), Student.class); //map Student object to JSON content mapper.writeValue(new File("student.json"), student);
让我们看看简单的数据绑定的实际应用。在这里,我们将 JAVA 对象直接映射到 JSON,反之亦然。
在C:\>Jackson_WORKSPACE中创建一个名为 JacksonTester 的 java 类文件。
文件:JacksonTester.java
导入java.io.File; 导入java.io.IOException; 导入 com.fasterxml.jackson.core.JsonGenerationException; 导入 com.fasterxml.jackson.core.JsonParseException; 导入 com.fasterxml.jackson.databind.JsonMappingException; 导入 com.fasterxml.jackson.databind.ObjectMapper; 公共类 JacksonTester { 公共静态无效主(字符串参数[]){ JacksonTester 测试器 = new JacksonTester(); 尝试 { 学生学生=新学生(); 学生.setAge(10); 学生.setName("Mahesh"); 测试者.writeJSON(学生); 学生student1 = tester.readJSON(); System.out.println(student1); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 私人无效 writeJSON(学生学生)抛出 JsonGenerationException,JsonMappingException,IOException{ ObjectMapper 映射器 = new ObjectMapper(); mapper.writeValue(new File("student.json"), Student); } 私人学生 readJSON() 抛出 JsonParseException、JsonMappingException、IOException{ ObjectMapper 映射器 = new ObjectMapper(); 学生学生=mapper.rea