以下是2025–2026年视角下,Java 处理 JSON 最实用、最常被用到的技巧汇总(主要基于目前最主流的几种库)。
目前主流选择排序(推荐优先级):
| 排名 | 库 | 推荐场景 | 性能 | 活跃度 | Spring Boot 3.x 默认 |
|---|---|---|---|---|---|
| 1 | Jackson | 企业级、复杂对象、Spring全家桶 | ★★★★★ | ★★★★★ | 是 |
| 2 | Fastjson2 | 追求极致性能、对安全性要求不高场景 | ★★★★★ | ★★★★☆ | 否 |
| 3 | Gson | Android、轻量简单场景 | ★★★★☆ | ★★★★☆ | 否 |
| 4 | JSON-B | 纯Jakarta EE 项目、标准 | ★★★☆☆ | ★★★☆☆ | 部分 |
1. 最推荐的现代依赖(2025-2026主流写法)
<!-- Jackson(强烈推荐) -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.17.2</version> <!-- 或更新版本 -->
</dependency>
<!-- 如果需要JDK17+记录类、虚拟记录等支持 -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk17</artifactId>
<version>2.17.2</version>
</dependency>
<!-- Fastjson2(性能党选择) -->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.50</version> <!-- 关注安全公告 -->
</dependency>
<!-- Gson(轻量选择) -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.11.0</version>
</dependency>
2. 最高频实用技巧清单(带代码)
技巧1:优雅处理 LocalDateTime / Instant(最痛点之一)
// Jackson 推荐写法(全局配置一次即可)
ObjectMapper mapper = JsonMapper.builder()
.addModule(new JavaTimeModule()) // 支持 java.time.*
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.build();
// 或使用注解(更精细控制)
public class Order {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate deliveryDate;
}
Fastjson2 等价写法:
JSONWriter.Feature.WriteDateUseDateFormat,
JSONWriter.Feature.WriteLocalDateTimeAsString
技巧2:忽略 null 值 & 空集合(减小报文体积)
// Jackson
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // null不输出
mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); // 空集合/空串不输出
// 字段级别
@JsonInclude(JsonInclude.Include.NON_NULL)
private String remark;
技巧3:字段名风格自动转换(最常用场景)
// Jackson - snake_case ↔ camelCase
mapper.registerModule(new SimpleModule()
.addSerializer(String.class, new PropertyNamingStrategies.SnakeCaseStrategy()...));
// 或全局配置(Spring Boot常用)
@Bean
public ObjectMapper objectMapper() {
return JsonMapper.builder()
.propertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE)
.build();
}
技巧4:处理未知字段不报错(向前兼容神器)
// Jackson
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// Fastjson2
JSONReader.Feature.IgnoreAutoTypeNotMatch,
JSONReader.Feature.ErrorOnUnknown
技巧5:泛型集合反序列化(最容易出错的地方)
// Jackson 推荐写法
List<User> users = mapper.readValue(json,
mapper.getTypeFactory().constructCollectionType(List.class, User.class));
// 更复杂的嵌套泛型
Map<String, List<User>> data = mapper.readValue(json,
new TypeReference<>() {});
Gson 等价:
Type type = new TypeToken<List<User>>(){}.getType();
List<User> users = gson.fromJson(json, type);
技巧6:超大 JSON → 流式处理(内存杀手克星)
// Jackson 流式读取(推荐)
try (JsonParser parser = mapper.createParser(hugeJsonInputStream)) {
while (parser.nextToken() != null) {
if (parser.currentToken() == JsonToken.FIELD_NAME) {
String field = parser.getCurrentName();
if ("orders".equals(field)) {
parser.nextToken(); // 进入数组
while (parser.nextToken() != JsonToken.END_ARRAY) {
Order order = mapper.readValue(parser, Order.class);
// 逐条处理
}
}
}
}
}
技巧7:JSON Patch / JSON Merge Patch(声明式修改)
// Jackson 支持 RFC 6902
JsonNode patchNode = mapper.readTree(patchJson);
ObjectMapper mapperWithPatch = JsonMapper.builder().build();
JsonNode target = mapperWithPatch.readerFor(User.class)
.with(new JsonPatch(patchNode))
.readValue(originalUserJson);
技巧8:快速脱敏 / 过滤敏感字段(合规必备)
// Jackson 方式一:@JsonFilter
@JsonFilter("sensitiveFilter")
public class User { ... }
// 方式二:自定义 Serializer
public class MaskPhoneSerializer extends StdSerializer<String> {
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider p) {
if (value != null && value.length() == 11) {
gen.writeString(value.substring(0,3) + "****" + value.substring(7));
}
}
}
技巧9:Fastjson2 高性能实用配置(追求极致时用)
JSONWriter jsonWriter = JSONWriter.ofUTF8()
.setFeatures(
JSONWriter.Feature.WriteNullsAsEmptyString,
JSONWriter.Feature.PrettyFormatIfLengthGt512,
JSONWriter.Feature.NotWriteDefaultValue
);
快速选择建议表(2026视角)
| 你最在意的点 | 推荐库 | 次选 |
|---|---|---|
| Spring Boot 3.x 项目 | Jackson | — |
| 最高性能 | Fastjson2 | Jackson |
| Android 开发 | Gson | Fastjson2 |
| 内存极度敏感 + 大JSON | Jackson Stream | — |
| 代码最少、最简单 | Gson | Fastjson2 |
| 需要严格标准合规 | JSON-B / Jackson | — |
你目前项目用的是哪个库?或者主要痛点是什么(日期、泛型、性能、内存、字段风格……)?可以讲得更具体一些,我可以给你更针对性的写法。