1. 概述
在 Java 中处理 JSON 数据本可以很简单,但和 Java 里的大多数事情一样,我们面临太多选择——各种库、各种风格,一不小心就踩坑。
本文不搞花里胡哨,目标很明确:帮你快速理清当前主流的 JSON 库生态,避免选型纠结。我们会聚焦以下几个常见库:
- ✅ Jackson —— 实际意义上的行业标准
- ✅ Gson —— Google 出品,简单直接
- ⚠️ json-io —— 小众但有特色
- ⚠️ Genson —— 功能完整但社区偏弱
- ✅ JSON-P (JSR 353) —— 官方标准 API,常被忽略
每个库我们都用统一结构讲解:先给学习资源,再上真实可运行的代码示例,让你一眼看出“写起来爽不爽”。
💡 提示:本文面向有经验的开发者,基础概念如 POJO、序列化等不再赘述。
2. 流行度与基础数据
选库第一步,看数据。以下为截至当前的 Maven 使用量与 GitHub 活跃度(数据越靠前越主流):
2.1. Jackson
- ✅ Maven 使用量:
jackson-databind
: 2362kjackson-core
: 1377k
- ⭐ GitHub Stars: 1457
- 🍴 Forks: 585
✅ 毫无疑问的王者,Spring 生态默认集成,社区资源丰富到爆炸。
2.2. Gson
- ✅ Maven 使用量: 1588k
- ⭐ GitHub Stars: 2079
- 🍴 Forks: 471
✅ Google 出品,API 极简,Android 开发者最爱。虽然 Maven 使用量略低于 Jackson,但 GitHub 星数反超,说明社区认可度高。
2.3. json-io
- ❌ Maven 使用量: 11k
- ⭐ GitHub Stars: 129
- 🍴 Forks: 40
⚠️ 小众库,功能偏重“无侵入式”序列化,适合特定场景,但生态弱。
2.4. Genson
- ❌ Maven 使用量: 8k
- ⭐ GitHub Stars: 67
- 🍴 Forks: 15
⚠️ 更小众,Scala 支持是亮点,但整体活跃度低,不推荐新项目使用。
2.5. JSON-P
- ⭐ GitHub Stars: 119
- 🍴 Forks: 54
✅ JSR 353 标准实现,Jakarta EE 官方 API。虽不直接用于日常开发,但作为底层标准,很多框架在其之上封装。
3. Jackson
目前 Java 生态中最主流的 JSON 处理库,功能全面,性能优秀,Spring 全家桶默认集成。
3.1. 学习资源
官方 & 社区
Baeldung 系列教程(强烈推荐)
其他优质文章
3.2. Maven 依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
🔔 注意:
jackson-databind
会自动引入jackson-core
和jackson-annotations
,无需单独声明。
3.3. Jackson 简单示例
@Test
public void whenSerializeAndDeserializeUsingJackson_thenCorrect()
throws IOException {
Foo foo = new Foo(1, "first");
ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(foo);
Foo result = mapper.readValue(jsonStr, Foo.class);
assertEquals(foo.getId(), result.getId());
}
输出 JSON:
{
"id": 1,
"name": "first"
}
关键点:
- ✅
mapper.writeValueAsString()
:对象 → JSON 字符串 - ✅
mapper.readValue()
:JSON 字符串 → 对象 - ⚠️ 默认使用字段名,无需注解(除非需要定制)
4. Gson
Google 开发的轻量级 JSON 库,API 设计简洁,适合快速开发和 Android 项目。
4.1. 学习资源
官方
Baeldung
其他
4.2. Maven 依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.8</version>
</dependency>
4.3. Gson 简单示例
@Test
public void whenSerializeAndDeserializeUsingGson_thenCorrect() {
Gson gson = new Gson();
Foo foo = new Foo(1, "first");
String jsonStr = gson.toJson(foo);
Foo result = gson.fromJson(jsonStr, Foo.class);
assertEquals(foo.getId(), result.getId());
}
关键点:
- ✅
gson.toJson()
:对象 → JSON - ✅
gson.fromJson()
:JSON → 对象 - ✅ 无需 getter/setter,直接反射字段(即使 private)
- ⚠️ 对泛型支持稍弱,需用
TypeToken
包装
5. json-io
一个专注于“完美序列化 Java 对象”的库,支持循环引用、私有字段等,但生态较弱。
5.1. 学习资源
5.2. Maven 依赖
<dependency>
<groupId>com.cedarsoftware</groupId>
<artifactId>json-io</artifactId>
<version>4.13.0</version>
</dependency>
5.3. json-io 简单示例
@Test
public void whenSerializeAndDeserializeUsingJsonio_thenCorrect() {
Foo foo = new Foo(1, "first");
String jsonStr = JsonWriter.objectToJson(foo);
Foo result = (Foo) JsonReader.jsonToJava(jsonStr);
assertEquals(foo.getId(), result.getId());
}
输出 JSON:
{
"@type": "org.baeldung.Foo",
"id": 1,
"name": "first"
}
关键点:
- ✅ 自动写入类型信息(
@type
),反序列化更安全 - ✅ 支持复杂对象图(如循环引用)
- ❌ 输出带类型元数据,不适合对外暴露的接口
6. Genson
一个支持 Java 和 Scala 的 JSON 库,提供完整数据绑定和流式处理能力。
6.1. 学习资源
6.2. Maven 依赖
<dependency>
<groupId>com.owlike</groupId>
<artifactId>genson</artifactId>
<version>1.6</version>
</dependency>
6.3. Genson 简单示例
@Test
public void whenSerializeAndDeserializeUsingGenson_thenCorrect() {
Genson genson = new Genson();
Foo foo = new Foo(1, "first");
String jsonStr = genson.serialize(foo);
Foo result = genson.deserialize(jsonStr, Foo.class);
assertEquals(foo.getId(), result.getId());
}
关键点:
- ✅ API 简洁,类似 Gson
- ✅ 支持流式处理、自定义转换器
- ❌ 社区小,文档少,出问题难排查
7. JSON-P
Java 官方的 JSON 处理 API(JSR 353),属于 Jakarta EE 标准,提供低层解析与生成能力。
⚠️ 注意:它不是“拿来就用”的高层库,而是类似 SAX 的流式 API,适合构建框架或需要精细控制的场景。
7.1. 学习资源
7.2. Maven 依赖
<!-- API 接口 -->
<dependency>
<groupId>jakarta.json</groupId>
<artifactId>jakarta.json-api</artifactId>
<version>2.1.1</version>
</dependency>
<!-- 默认实现(GlassFish) -->
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.json</artifactId>
<version>2.0.1</version>
</dependency>
7.3. JSON-P 简单示例
@Test
public void whenTransformingAndParsingUsingJsonp_thenCorrect() {
Foo foo = new Foo(1, "First");
// 构建 JSON 对象
JsonObject json = Json.createObjectBuilder()
.add("id", foo.getId())
.add("name", foo.getName())
.build();
String result = json.toString();
// 解析 JSON
JsonParser parser = Json.createParser(new StringReader(result));
while (parser.hasNext()) {
JsonParser.Event event = parser.next();
switch (event) {
case VALUE_STRING:
String value = parser.getString();
assertEquals(foo.getName(), value);
break;
}
}
parser.close();
}
关键点:
- ✅
Json.createObjectBuilder()
:构建 JSON - ✅
Json.createParser()
:流式解析 - ⚠️ 属于低层 API,代码量多,不适合日常业务开发
- ✅ 常用于框架底层(如 JAX-RS 实现)
8. 总结
库名 | 推荐指数 | 适用场景 |
---|---|---|
Jackson | ⭐⭐⭐⭐⭐ | Spring 项目、微服务、高性能场景 |
Gson | ⭐⭐⭐⭐☆ | Android、简单项目、快速原型 |
json-io | ⭐⭐☆☆☆ | 需要完美序列化复杂对象图(如缓存) |
Genson | ⭐⭐☆☆☆ | Scala 混合项目,或已有技术栈依赖 |
JSON-P | ⭐⭐⭐☆☆ | 框架开发、需要遵循 Jakarta EE 标准 |
✅ 结论:
- 新项目首选 Jackson,生态无敌,性能稳定。
- Android 或轻量级后端可用 Gson,API 更友好。
- 别碰 json-io 和 Genson,除非有特殊需求。
- JSON-P 了解即可,知道它是“标准”就行。
📌 提醒:无论选哪个,保持团队统一比库本身更重要。别让同事看到你用 Genson 而全组都在用 Jackson。