目录
- 简介
- 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 解析库,适合轻量级应用。
依赖
<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"));// 生成 JSONJSONObject 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);// 对象转 JSONString jsonOutput = objectMapper.writeValueAsString(user);System.out.println(jsonOutput);}
}class User {public String name;public int age;public User() {} // Jackson 需要默认构造器@Overridepublic 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);// 对象转 JSONString 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);// 对象转 JSONString 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
,并提供了详细的示例和最佳实践。希望对你有所帮助!
参考资料
- Jackson 官方文档
- Gson 官方文档
- Fastjson 官方文档
- 在线JSON美化