Java 处理 JSON 编程实用技巧(2026最新版)
—— 从入门到生产级,一篇搞定! 🔥
大家好!JSON 是 Java 后端开发中最常见的数据交换格式。
无论是 REST 接口、配置文件、消息队列、Redis 缓存、日志解析……到处都是 JSON。
本文基于 2026 年主流生态,精选 最实用、最推荐 的技巧,涵盖 Jackson(官方推荐)、FastJSON2、Gson 三种库,全部代码可直接复制运行。
一、2026 年 Java JSON 生态推荐对比
| 库 | 速度 | 功能丰富度 | 内存占用 | Spring Boot 默认 | 推荐场景 | 最新版本 |
|---|---|---|---|---|---|---|
| Jackson | ★★★★ | ★★★★★ | 中 | 是 | 企业级、生产首选 | 2.18+ |
| FastJSON2 | ★★★★★ | ★★★★☆ | 低 | 否 | 高性能、对中文友好 | 2.0.52+ |
| Gson | ★★★ | ★★★☆☆ | 低 | 否 | Android、小工具、简单场景 | 2.10.1+ |
结论(2026推荐):
- 企业项目 / Spring Boot → Jackson(强烈推荐)
- 追求极致性能 → FastJSON2
- 轻量工具 → Gson
二、Jackson 实战技巧(生产首选)
1. 基础依赖(Maven)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.18.2</version>
</dependency>
2. 核心对象:ObjectMapper(单例使用!)
// 推荐全局单例,线程安全
private static final ObjectMapper mapper = new ObjectMapper()
.enable(SerializationFeature.INDENT_OUTPUT) // 美化输出
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 忽略null字段
3. 常用实用技巧(直接复制)
// 1. 对象 → JSON 字符串
User user = new User(1L, "张三", 18, "1234567890@qq.com");
String json = mapper.writeValueAsString(user);
System.out.println(json);
// 2. JSON 字符串 → 对象
User u = mapper.readValue(json, User.class);
// 3. JSON → List / Map(最常用!)
String jsonList = "[{\"id\":1,\"name\":\"李四\"},{\"id\":2,\"name\":\"王五\"}]";
List<User> list = mapper.readValue(jsonList, new TypeReference<List<User>>(){});
// 4. 优雅处理日期(2026推荐写法)
mapper.registerModule(new JavaTimeModule());
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
// 5. 忽略未知字段(接口兼容神器)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 6. 漂亮打印(调试用)
String pretty = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user);
4. 注解使用技巧(提升可读性)
@JsonIgnoreProperties(ignoreUnknown = true) // 类级别忽略未知字段
public class User {
@JsonProperty("user_id") // 字段名映射
private Long id;
@JsonInclude(JsonInclude.Include.NON_NULL)
private String email;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
@JsonIgnore // 忽略该字段
private String password;
}
三、FastJSON2 实用技巧(性能党最爱)
依赖:
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.52</version>
</dependency>
核心 API(比 Jackson 更简洁):
// 对象 → JSON
String json = JSON.toJSONString(user);
// JSON → 对象
User u = JSON.parseObject(json, User.class);
// JSON → List
List<User> list = JSON.parseArray(jsonList, User.class);
// 漂亮打印
String pretty = JSON.toJSONString(user, JSONWriter.Feature.PrettyFormat);
// 日期格式全局配置
JSON.config(JSONWriter.Feature.WriteDateUseTimeZone);
FastJSON2 特有优势:
- 对中文支持极好
- 极致性能(比 Jackson 快 30%~100%)
- 支持
JSONPath查询
四、Gson 实用技巧(轻量场景)
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.setDateFormat("yyyy-MM-dd HH:mm:ss")
.create();
String json = gson.toJson(user);
User u = gson.fromJson(json, User.class);
五、生产级最佳实践(强烈建议遵守)
- 全局统一 ObjectMapper / JSON 配置(不要到处 new)
- 统一日期格式:
yyyy-MM-dd HH:mm:ss或Instant - 接口返回统一包装:使用
@JsonInclude+ 自定义Result<T> - 大 JSON 优化:使用
Streaming API(Jackson JsonParser / JsonGenerator) - 安全性:禁止直接把前端传来的 JSON 转对象,要做字段校验(@Valid + Bean Validation)
- 性能监控:生产环境可开启 Jackson 的
SerializationFeature.FAIL_ON_EMPTY_BEANS等配置
六、今日作业(建议立刻动手)
- 用 Jackson 把一个
List<User>转成 JSON,再转回来 - 用 FastJSON2 实现带日期格式和漂亮打印的序列化
- 自定义一个
Result<T>统一返回类,并加上 Jackson 注解
把作业代码贴到评论区,我会逐条点评优化!
下一期预告:《Java 处理 JSON 进阶篇 —— JSONPath、树模型、Streaming API、大文件处理》
把这篇文章收藏 + 转发给你的 Java 后端小伙伴吧 —— 掌握 JSON 处理,你就掌握了前后端数据通信的命脉!
(本文所有代码均在 Java 17/21 + Spring Boot 3.3 + Jackson 2.18 / FastJSON2 2.0.52 环境下实测通过)