目录
简介
Java 解析 JSON 的方式
使用 org.json
使用 Jackson
使用 Gson
使用 Fastjson
JSON 解析与序列化示例
对象转 JSON
JSON 转对象
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 解析库,适合轻量级应用。
依赖
示例
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 互转。
依赖
示例
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 项目。
依赖
示例
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 解析库,适用于高并发场景。
依赖
示例
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>() {});
System.out.println(users);
最佳实践
选择合适的 JSON 库
轻量级应用:org.json
全面功能:Jackson
Android 应用:Gson
高性能需求:Fastjson
使用对象映射
避免 Map
处理异常
JSON 解析时可能会抛出 JSONException 或 IOException,应使用 try-catch 进行异常处理。
使用 @JsonProperty
在 Jackson 中,字段名与 JSON 不匹配时,可使用 @JsonProperty("json_name") 注解。
优化性能
在高并发场景下,可使用 Jackson 的 ObjectMapper 作为单例对象。
小结
本篇文章介绍了 Java 解析 JSON 的几种方式,包括 org.json、Jackson、Gson 和 Fastjson,并提供了详细的示例和最佳实践。希望对你有所帮助!
参考资料
Jackson 官方文档
Gson 官方文档
Fastjson 官方文档
在线JSON美化