城阳城市规划建设局网站,中国企业排名前十名,自己架设网站备案,温州建设信息港网站目录 前言 Jackson 是 Java 生态中最流行的 JSON 处理库之一#xff0c;广泛应用于 RESTful API、数据存储和传输等场景。它提供了高效、灵活的 JSON 序列化和反序列化功能#xff0c;支持注解、模块化设计和多种数据格式#xff08;如 XML、YAML#xff09;。本文将详细介…目录 前言 Jackson 是 Java 生态中最流行的 JSON 处理库之一广泛应用于 RESTful API、数据存储和传输等场景。它提供了高效、灵活的 JSON 序列化和反序列化功能支持注解、模块化设计和多种数据格式如 XML、YAML。本文将详细介绍 Jackson 的核心模块、使用方法、注意事项以及代码示例。
1. Jackson 的核心模块
2. 使用 Jackson
2.1 添加依赖
2.2 核心类ObjectMapper
2.3 基本使用
序列化
反序列化:
3. 使用注解
3.1 常用注解
3.2 示例代码
4. 高级用法
4.1 处理复杂对象
4.2 自定义序列化和反序列化
4.3 处理多态类型
5. 注意事项
6. 总结 前言 Jackson 是 Java 生态中最流行的 JSON 处理库之一广泛应用于 RESTful API、数据存储和传输等场景。它提供了高效、灵活的 JSON 序列化和反序列化功能支持注解、模块化设计和多种数据格式如 XML、YAML。本文将详细介绍 Jackson 的核心模块、使用方法、注意事项以及代码示例。
1. Jackson 的核心模块
Jackson 采用模块化设计核心模块包括
jackson-core 提供底层 JSON 解析和生成功能。包含 JsonParser解析 JSON和 JsonGenerator生成 JSON。 jackson-annotations 提供丰富的注解用于控制 JSON 的序列化和反序列化行为。 jackson-databind 提供高级数据绑定功能将 JSON 数据与 Java 对象相互转换。 jackson-dataformat-xml 支持 XML 格式的序列化和反序列化。 jackson-dataformat-yaml 支持 YAML 格式的序列化和反序列化。 2. 使用 Jackson
2.1 添加依赖
在 Maven 项目中添加以下依赖
dependencies!-- Jackson 核心模块 --dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.13.3/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.13.3/version/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.13.3/version/dependency!-- 可选支持 XML --dependencygroupIdcom.fasterxml.jackson.dataformat/groupIdartifactIdjackson-dataformat-xml/artifactIdversion2.13.3/version/dependency!-- 可选支持 YAML --dependencygroupIdcom.fasterxml.jackson.dataformat/groupIdartifactIdjackson-dataformat-yaml/artifactIdversion2.13.3/version/dependency
/dependencies2.2 核心类ObjectMapper
ObjectMapper 是 Jackson 的核心类用于实现 JSON 与 Java 对象的相互转换。以下是其常用方法
方法描述writeValueAsString(Object)将 Java 对象序列化为 JSON 字符串。readValue(String, Class)将 JSON 字符串反序列化为 Java 对象。writeValue(File, Object)将 Java 对象序列化到文件中。readValue(File, Class)从文件中反序列化 JSON 数据。
2.3 基本使用
序列化
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {public static void main(String[] args) throws Exception {User user new User(John, 30);ObjectMapper mapper new ObjectMapper();String json mapper.writeValueAsString(user);System.out.println(json); // 输出: {name:John,age:30}}
}
class User {private String name;private int age;// 构造函数、Getter 和 Setterpublic User(String name, int age) {this.name name;this.age age;}public String getName() { return name; }public void setName(String name) { this.name name; }public int getAge() { return age; }public void setAge(int age) { this.age age; }
}反序列化:
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {public static void main(String[] args) throws Exception {String json {\name\:\John\,\age\:30};ObjectMapper mapper new ObjectMapper();User user mapper.readValue(json, User.class);System.out.println(user.getName()); // 输出: JohnSystem.out.println(user.getAge()); // 输出: 30}
}3. 使用注解
Jackson 提供了丰富的注解用于控制 JSON 的序列化和反序列化行为。
3.1 常用注解
注解描述JsonProperty指定 JSON 字段的名称。JsonIgnore忽略字段不参与序列化和反序列化。JsonFormat指定日期、时间等字段的格式化方式。JsonInclude控制字段在序列化时的包含规则如非空字段才序列化。JsonCreator指定反序列化时的构造函数或工厂方法。JsonAlias为字段指定多个 JSON 别名反序列化时可以匹配多个名称。
3.2 示例代码
import com.fasterxml.jackson.annotation.*;
public class User {JsonProperty(user_name)private String name;JsonIgnoreprivate String password;JsonFormat(pattern yyyy-MM-dd)private Date birthDate;JsonInclude(JsonInclude.Include.NON_NULL)private String email;// 构造函数、Getter 和 Setter
}4. 高级用法
4.1 处理复杂对象
Jackson 支持嵌套对象、集合和映射的序列化和反序列化。
class Address {private String city;private String street;// 构造函数、Getter 和 Setter
}
class User {private String name;private ListAddress addresses;// 构造函数、Getter 和 Setter
}4.2 自定义序列化和反序列化
通过实现 JsonSerializer 和 JsonDeserializer可以自定义序列化和反序列化逻辑。
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.io.IOException;
JsonSerialize(using CustomSerializer.class)
class User {private String name;// 构造函数、Getter 和 Setter
}
class CustomSerializer extends JsonSerializerUser {Overridepublic void serialize(User user, JsonGenerator gen, SerializerProvider serializers) throws IOException {gen.writeStartObject();gen.writeStringField(user_name, user.getName());gen.writeEndObject();}
}4.3 处理多态类型
使用 JsonTypeInfo 和 JsonSubTypes 处理多态类型。
JsonTypeInfo(use JsonTypeInfo.Id.NAME, include JsonTypeInfo.As.PROPERTY, property type)
JsonSubTypes({JsonSubTypes.Type(value Dog.class, name dog),JsonSubTypes.Type(value Cat.class, name cat)
})
abstract class Animal {private String name;// 构造函数、Getter 和 Setter
}
class Dog extends Animal {private String breed;// 构造函数、Getter 和 Setter
}
class Cat extends Animal {private boolean likesCream;// 构造函数、Getter 和 Setter
}5. 注意事项
性能优化 重用 ObjectMapper 实例避免重复创建。 安全性 反序列化时避免直接反序列化不可信的 JSON 数据防止反序列化攻击。 版本兼容性 确保 jackson-core、jackson-annotations 和 jackson-databind 的版本一致。 空值处理 使用 JsonInclude(JsonInclude.Include.NON_NULL) 忽略空值字段。 补充
1. JSON处理库的作用
1.1 Fastjson
Fastjson是阿里巴巴开源的高性能JSON库主要用于Java对象与JSON字符串之间的序列化和反序列化。它支持复杂对象的处理包括嵌套对象、泛型、集合等广泛应用于高性能场景。
1.2 org.json
org.json是一个轻量级的JSON处理库提供了JSON的解析、生成和操作功能。它的API设计简单适合初学者和快速开发场景。
1.3 json-simple
json-simple是一个简单的JSON处理库专注于基本的JSON解析和生成。它的API设计非常简洁适合快速处理简单的JSON数据。 2. 技术原理
2.1 Fastjson
Fastjson的核心技术包括
高性能解析通过优化算法和数据结构Fastjson在解析JSON时速度非常快。动态类型处理支持复杂对象的序列化和反序列化包括泛型、嵌套对象等。自定义序列化允许开发者通过注解或自定义序列化器控制JSON的生成和解析。
2.2 org.json
org.json的核心技术包括
轻量级设计库的体积较小适合资源有限的环境。简单API提供了JSONObject和JSONArray等核心类易于上手。功能齐全支持JSON的解析、生成和操作。
2.3 json-simple
json-simple的核心技术包括
简洁API提供了JSONObject和JSONArray等核心类API设计非常简洁。轻量级设计库的体积较小适合快速开发场景。基础功能支持基本的JSON解析和生成。 3. 示例代码与输出结果
3.1 Fastjson示例
代码
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;public class FastjsonExample {public static void main(String[] args) {// 将Java对象转换为JSON字符串User user new User(John, 30);String jsonString JSON.toJSONString(user);System.out.println(Fastjson - JSON String: jsonString);// 将JSON字符串转换为Java对象User parsedUser JSON.parseObject(jsonString, User.class);System.out.println(Fastjson - Parsed User: parsedUser);// 操作JSON对象JSONObject jsonObject JSON.parseObject(jsonString);jsonObject.put(age, 31);System.out.println(Fastjson - Updated JSON: jsonObject.toJSONString());}
}class User {private String name;private int age;public User(String name, int age) {this.name name;this.age age;}// Getters and SettersOverridepublic String toString() {return User{name name , age age };}
}输出结果
Fastjson - JSON String: {age:30,name:John}
Fastjson - Parsed User: User{nameJohn, age30}
Fastjson - Updated JSON: {age:31,name:John}3.2 org.json示例
代码
import org.json.JSONObject;public class OrgJsonExample {public static void main(String[] args) {// 创建JSON对象JSONObject jsonObject new JSONObject();jsonObject.put(name, John);jsonObject.put(age, 30);System.out.println(org.json - JSON Object: jsonObject);// 从JSON字符串解析JSON对象String jsonString {\name\:\John\,\age\:30};JSONObject parsedJsonObject new JSONObject(jsonString);System.out.println(org.json - Parsed JSON Object: parsedJsonObject);// 操作JSON对象parsedJsonObject.put(age, 31);System.out.println(org.json - Updated JSON Object: parsedJsonObject);}
}输出结果
org.json - JSON Object: {name:John,age:30}
org.json - Parsed JSON Object: {name:John,age:30}
org.json - Updated JSON Object: {name:John,age:31}3.3 json-simple示例
代码
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;public class JsonSimpleExample {public static void main(String[] args) throws Exception {// 创建JSON对象JSONObject jsonObject new JSONObject();jsonObject.put(name, John);jsonObject.put(age, 30);System.out.println(json-simple - JSON Object: jsonObject.toJSONString());// 从JSON字符串解析JSON对象String jsonString {\name\:\John\,\age\:30};JSONParser parser new JSONParser();JSONObject parsedJsonObject (JSONObject) parser.parse(jsonString);System.out.println(json-simple - Parsed JSON Object: parsedJsonObject);// 操作JSON对象parsedJsonObject.put(age, 31);System.out.println(json-simple - Updated JSON Object: parsedJsonObject.toJSONString());}
}输出结果
json-simple - JSON Object: {name:John,age:30}
json-simple - Parsed JSON Object: {name:John,age:30}
json-simple - Updated JSON Object: {name:John,age:31}4. 对比与总结
特性Fastjsonorg.jsonjson-simple性能高性能适合大数据量处理性能一般性能一般功能性功能强大支持复杂对象功能齐全功能基础易用性API设计简单易于上手API设计简单适合初学者API设计简洁快速上手体积较大较小较小
结论
如果需要处理大量的JSON数据并且对性能有较高要求Fastjson 是最佳选择。如果需要一个轻量级且功能齐全的JSON库org.json 是一个不错的选择。如果只需要快速处理简单的JSON数据json-simple 是最简单的选择。 5. 注意事项
Fastjson的安全性Fastjson在过去曾被发现存在一些安全漏洞建议使用最新版本并关注官方更新。库的选择根据项目需求和开发环境选择合适的JSON库避免过度依赖单一库。
使用前导入对应的库
6. 总结
Jackson 是 Java 生态中最强大的 JSON 处理库提供了高效、灵活的序列化和反序列化功能。通过合理使用注解和高级特性可以满足各种复杂的 JSON 处理需求。无论是 RESTful API、数据存储还是数据传输Jackson 都是不可或缺的工具。 文章转载自: http://www.morning.rymd.cn.gov.cn.rymd.cn http://www.morning.fhhry.cn.gov.cn.fhhry.cn http://www.morning.nkrmh.cn.gov.cn.nkrmh.cn http://www.morning.zynjt.cn.gov.cn.zynjt.cn http://www.morning.ntkpc.cn.gov.cn.ntkpc.cn http://www.morning.qmbgb.cn.gov.cn.qmbgb.cn http://www.morning.kpfds.cn.gov.cn.kpfds.cn http://www.morning.brwnd.cn.gov.cn.brwnd.cn http://www.morning.dmlsk.cn.gov.cn.dmlsk.cn http://www.morning.ffcsr.cn.gov.cn.ffcsr.cn http://www.morning.nzmw.cn.gov.cn.nzmw.cn http://www.morning.rkfgx.cn.gov.cn.rkfgx.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.sxbgc.cn.gov.cn.sxbgc.cn http://www.morning.sthp.cn.gov.cn.sthp.cn http://www.morning.yqsq.cn.gov.cn.yqsq.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.rdnpg.cn.gov.cn.rdnpg.cn http://www.morning.tbknh.cn.gov.cn.tbknh.cn http://www.morning.tpwrm.cn.gov.cn.tpwrm.cn http://www.morning.qpnmd.cn.gov.cn.qpnmd.cn http://www.morning.gmplp.cn.gov.cn.gmplp.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.ttryd.cn.gov.cn.ttryd.cn http://www.morning.gqmhq.cn.gov.cn.gqmhq.cn http://www.morning.trtdg.cn.gov.cn.trtdg.cn http://www.morning.rxlk.cn.gov.cn.rxlk.cn http://www.morning.yzsdp.cn.gov.cn.yzsdp.cn http://www.morning.yktwr.cn.gov.cn.yktwr.cn http://www.morning.rqlf.cn.gov.cn.rqlf.cn http://www.morning.fhxrb.cn.gov.cn.fhxrb.cn http://www.morning.kcypc.cn.gov.cn.kcypc.cn http://www.morning.mgkb.cn.gov.cn.mgkb.cn http://www.morning.beijingzy.com.cn.gov.cn.beijingzy.com.cn http://www.morning.bplqh.cn.gov.cn.bplqh.cn http://www.morning.nkjpl.cn.gov.cn.nkjpl.cn http://www.morning.nfzw.cn.gov.cn.nfzw.cn http://www.morning.bgygx.cn.gov.cn.bgygx.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.cjnfb.cn.gov.cn.cjnfb.cn http://www.morning.jrqcj.cn.gov.cn.jrqcj.cn http://www.morning.brld.cn.gov.cn.brld.cn http://www.morning.rui931.cn.gov.cn.rui931.cn http://www.morning.daidudu.com.gov.cn.daidudu.com http://www.morning.lhztj.cn.gov.cn.lhztj.cn http://www.morning.klzt.cn.gov.cn.klzt.cn http://www.morning.ffksr.cn.gov.cn.ffksr.cn http://www.morning.xtqr.cn.gov.cn.xtqr.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.yrsg.cn.gov.cn.yrsg.cn http://www.morning.thjqk.cn.gov.cn.thjqk.cn http://www.morning.rfxw.cn.gov.cn.rfxw.cn http://www.morning.yodajy.cn.gov.cn.yodajy.cn http://www.morning.jlxqx.cn.gov.cn.jlxqx.cn http://www.morning.pzdxg.cn.gov.cn.pzdxg.cn http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn http://www.morning.jfwbr.cn.gov.cn.jfwbr.cn http://www.morning.jhrlk.cn.gov.cn.jhrlk.cn http://www.morning.ndrzq.cn.gov.cn.ndrzq.cn http://www.morning.frpb.cn.gov.cn.frpb.cn http://www.morning.ldzss.cn.gov.cn.ldzss.cn http://www.morning.xllrf.cn.gov.cn.xllrf.cn http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn http://www.morning.hsjfs.cn.gov.cn.hsjfs.cn http://www.morning.rxlk.cn.gov.cn.rxlk.cn http://www.morning.lynmt.cn.gov.cn.lynmt.cn http://www.morning.nggry.cn.gov.cn.nggry.cn http://www.morning.fhtmp.cn.gov.cn.fhtmp.cn http://www.morning.zsyqg.cn.gov.cn.zsyqg.cn http://www.morning.nbybb.cn.gov.cn.nbybb.cn http://www.morning.hsklc.cn.gov.cn.hsklc.cn http://www.morning.krnzm.cn.gov.cn.krnzm.cn http://www.morning.tntqr.cn.gov.cn.tntqr.cn http://www.morning.nqcts.cn.gov.cn.nqcts.cn http://www.morning.kyytt.cn.gov.cn.kyytt.cn http://www.morning.qgcfb.cn.gov.cn.qgcfb.cn http://www.morning.gpnfg.cn.gov.cn.gpnfg.cn http://www.morning.ptwrz.cn.gov.cn.ptwrz.cn http://www.morning.xnyfn.cn.gov.cn.xnyfn.cn http://www.morning.yccnj.cn.gov.cn.yccnj.cn