Java JSON 解析全面指南
目录
简介
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有良好的可读性和易解析性。在 Java 生态中,解析 JSON 主要有以下几种方式:
- org.json:官方提供的轻量级 JSON 处理库。
- Jackson:功能强大,支持序列化、反序列化和数据绑定,是业界标准之一。
- Gson:由 Google 提供,易用性强,适用于 Android 和 Java 项目。
- Fastjson:阿里巴巴开发的高性能 JSON 处理库,适用于高并发应用场景。
接下来,我们将详细介绍如何在 Java 中使用这些库来解析和生成 JSON。
Java 解析 JSON 的方式
使用 org.json
org.json
是最简单的 JSON 解析库,适合轻量级应用。
依赖
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
示例
import org.json.JSONObject;
public class OrgJsonExample {
public static void main(String[] args) {
String jsonStr = "{\"name\":\"Alice\",\"age\":25}";
// 解析 JSON 字符串
JSONObject jsonObject = new JSONObject(jsonStr);
System.out.println("姓名: " + jsonObject.getString("name"));
System.out.println("年龄: " + jsonObject.getInt("age"));
// 生成 JSON
JSONObject newJson = new JSONObject();
newJson.put("city", "Beijing");
newJson.put("country", "China");
System.out.println(newJson.toString());
}
}
使用 Jackson
Jackson 是最流行的 JSON 处理库,功能强大,支持对象与 JSON 互转。
依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version>
</dependency>
示例
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonExample {
public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
// JSON 转对象
String jsonStr = "{\"name\":\"Alice\",\"age\":25}";
User user = objectMapper.readValue(jsonStr, User.class);
System.out.println(user);
// 对象转 JSON
String jsonOutput = objectMapper.writeValueAsString(user);
System.out.println(jsonOutput);
}
}
class User {
public String name;
public int age;
public User() {} // Jackson 需要默认构造器
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + "}";
}
}
使用 Gson
Gson 由 Google 提供,API 简洁,适合 Android 项目。
依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10</version>
</dependency>
示例
import com.google.gson.Gson;
public class GsonExample {
public static void main(String[] args) {
Gson gson = new Gson();
// JSON 转对象
String jsonStr = "{\"name\":\"Alice\",\"age\":25}";
User user = gson.fromJson(jsonStr, User.class);
System.out.println(user);
// 对象转 JSON
String jsonOutput = gson.toJson(user);
System.out.println(jsonOutput);
}
}
使用 Fastjson
Fastjson 是阿里巴巴的高性能 JSON 解析库,适用于高并发场景。
依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.39</version>
</dependency>
示例
import com.alibaba.fastjson.JSON;
public class FastjsonExample {
public static void main(String[] args) {
// JSON 转对象
String jsonStr = "{\"name\":\"Alice\",\"age\":25}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user);
// 对象转 JSON
String jsonOutput = JSON.toJSONString(user);
System.out.println(jsonOutput);
}
}
JSON 解析与序列化示例
对象转 JSON
使用 Jackson:
ObjectMapper objectMapper = new ObjectMapper();
User user = new User("Alice", 25);
String jsonString = objectMapper.writeValueAsString(user);
System.out.println(jsonString);
使用 Gson:
Gson gson = new Gson();
String jsonString = gson.toJson(user);
System.out.println(jsonString);
JSON 转对象
使用 Jackson:
User user = objectMapper.readValue(jsonString, User.class);
使用 Gson:
User user = gson.fromJson(jsonString, User.class);
JSON 数组解析
String jsonArrayStr = "[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]";
List<User> users = objectMapper.readValue(jsonArrayStr, new TypeReference<List<User>>() {});
System.out.println(users);
最佳实践
-
选择合适的 JSON 库
- 轻量级应用:
org.json
- 全面功能:
Jackson
- Android 应用:
Gson
- 高性能需求:
Fastjson
- 轻量级应用:
-
使用对象映射
- 避免
Map<String, Object>
,推荐使用 POJO(Plain Old Java Object)。
- 避免
-
处理异常
- JSON 解析时可能会抛出
JSONException
或IOException
,应使用try-catch
进行异常处理。
- JSON 解析时可能会抛出
-
使用
@JsonProperty
- 在 Jackson 中,字段名与 JSON 不匹配时,可使用
@JsonProperty("json_name")
注解。
- 在 Jackson 中,字段名与 JSON 不匹配时,可使用
-
优化性能
- 在高并发场景下,可使用 Jackson 的
ObjectMapper
作为单例对象。
- 在高并发场景下,可使用 Jackson 的
小结
本篇文章介绍了 Java 解析 JSON 的几种方式,包括 org.json
、Jackson
、Gson
和 Fastjson
,并提供了详细的示例和最佳实践。希望对你有所帮助!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?