Java中如何使用JSON方法:从基础到实践
在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其易读、易解析的特性,被广泛应用于前后端数据交互、配置文件存储、API接口响应等场景,本文将详细介绍Java中处理JSON的核心方法,包括常用库的介绍、基本操作(解析与生成)以及进阶实践,帮助开发者快速JSON处理技巧。
Java中处理JSON的常用库
Java标准库本身不直接支持JSON,因此需要借助第三方库,目前主流的JSON处理库有以下几种,开发者可根据需求选择:
Jackson
特点:高性能、功能全面,是Spring Framework默认的JSON处理库,支持将Java对象序列化为JSON字符串(序列化),也可将JSON字符串反序列化为Java对象(反序列化),同时支持流式处理、树模型等高级特性。
依赖引入(Maven):
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency>
Gson
特点:Google开发,简单易用,对复杂对象(如泛型、枚举)的支持较好,无需注解即可实现基本的序列化/反序列化。
依赖引入(Maven):
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
org.json
特点:轻量级,API简洁,适合处理简单的JSON数据,但功能相对有限,复杂场景可能需要额外代码。
依赖引入(Maven):
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20231013</version> </dependency>
Fastjson
特点:阿里巴巴开发,解析速度极快,是国内早期广泛使用的JSON库,但存在安全漏洞(如1.2.68版本前的远程代码执行风险),新项目已不推荐使用,建议优先选择Jackson或Gson。
JSON基础操作:序列化与反序列化
无论是哪种库,JSON处理的核心都是两个操作:序列化(Java对象 → JSON字符串)和反序列化(JSON字符串 → Java对象),下面以最常用的Jackson和Gson为例,演示基本用法。
使用Jackson处理JSON
(1)定义JavaBean
创建一个与JSON结构对应的Java类(POJO):
public class User { private String name; private int age; private String[] hobbies; // 无参构造器(反序列化时需要) public User() {} // 有参构造器 public User(String name, int age, String[] hobbies) { this.name = name; this.age = age; this.hobbies = hobbies; } // Getter和Setter(序列化/反序列化时需要) public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String[] getHobbies() { return hobbies; } public void setHobbies(String[] hobbies) { this.hobbies = hobbies; } @Override public String toString() { return "User{name='" + name + "', age=" + age + ", hobbies=" + Arrays.toString(hobbies) + "}"; } }
(2)序列化:Java对象 → JSON字符串
import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonExample { public static void main(String[] args) throws Exception { User user = new User("张三", 25, new String[]{"读书", "运动"}); // 创建ObjectMapper实例 ObjectMapper objectMapper = new ObjectMapper(); // 序列化为JSON字符串(默认格式化输出) String jsonString = objectMapper.writeValueAsString(user); System.out.println("序列化结果:" + jsonString); // 输出:{"name":"张三","age":25,"hobbies":["读书","运动"]} // 序列化为格式化的JSON字符串(缩进2空格) String formattedJson = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(user); System.out.println("格式化JSON:" + formattedJson); /* 输出: { "name" : "张三", "age" : 25, "hobbies" : [ "读书", "运动" ] } */ } }
(3)反序列化:JSON字符串 → Java对象
import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonDeserializeExample { public static void main(String[] args) throws Exception { String jsonString = "{\"name\":\"李四\",\"age\":30,\"hobbies\":\"游泳,编程\"}"; ObjectMapper objectMapper = new ObjectMapper(); // 反序列化为User对象 User user = objectMapper.readValue(jsonString, User.class); System.out.println("反序列化结果:" + user); // 输出:User{name='李四', age=30, hobbies=[游泳, 编程]} // 处理JSON数组(反序列化为List<User>) String jsonArrayString = "[{\"name\":\"王五\",\"age\":28,\"hobbies\":\"音乐\"}]"; List<User> userList = objectMapper.readValue(jsonArrayString, new TypeReference<List<User>>() {}); System.out.println("JSON数组反序列化:" + userList); // 输出:[User{name='王五', age=28, hobbies=[音乐]}] } }
使用Gson处理JSON
Gson的API设计与Jackson类似,但更注重简洁性,无需额外配置即可处理基本数据类型。
(1)序列化:Java对象 → JSON字符串
import com.google.gson.Gson; public class GsonExample { public static void main(String[] args) { User user = new User("赵六", 35, new String[]{"旅行", "摄影"}); // 创建Gson实例 Gson gson = new Gson(); // 序列化为JSON字符串(默认不格式化) String jsonString = gson.toJson(user); System.out.println("序列化结果:" + jsonString); // 输出:{"name":"赵六","age":35,"hobbies":["旅行","摄影"]} // 使用GsonBuilder格式化输出 com.google.gson.Gson prettyGson = new com.google.gson.GsonBuilder() .setPrettyPrinting() .create(); String formattedJson = prettyGson.toJson(user); System.out.println("格式化JSON:" + formattedJson); /* 输出: { "name": "赵六", "age": 35, "hobbies": [ "旅行", "摄影" ] } */ } }
(2)反序列化:JSON字符串 → Java对象
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.List; public class GsonDeserializeExample { public static void main(String[] args) { String jsonString = "{\"name\":\"钱七\",\"age\":40,\"hobbies\":\"钓鱼,下棋\"}"; Gson gson = new Gson(); // 反序列化为User对象 User user = gson.fromJson(jsonString, User.class); System.out.println("反序列化结果:" + user); // 输出:User{name='钱七', age=40, hobbies=[钓鱼, 下棋]} // 处理JSON数组(反序列化为List<User>) String jsonArrayString = "[{\"name\":\"孙八\",\"age\":22,\"hobbies\":\"游戏\"}]"; Type userListType = new TypeToken<List<User>>() {}.getType(); List<User> userList = gson.fromJson(jsonArrayString, userListType); System.out.println("JSON数组反序列化:" + userList); // 输出:[User{name='孙八', age=22, hobbies=[游戏]}] } }
使用org.json处理JSON
org.json适合轻量级场景,API直接操作JSON字符串、JSONObject、JSONArray等对象。
(1)创建JSON对象并序列化
import org.json.JSONObject; public class OrgJsonExample { public static void main(String[] args) { // 创建JSONObject(类似Map) JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "周九"); jsonObject.put("age", 28); jsonObject.put("hobbies", new String[]{"画画", "编程"}); // 直接输出JSON字符串 System.out.println("JSON字符串:" + jsonObject.toString()); // 输出:{"name":"周九","age":28,"hobbies":["画画","编程"]} } }
(2)解析JSON字符串并反序列化
import org.json.JSONObject; import org.json.JSONArray; public class OrgJsonParseExample { public static void main
还没有评论,来说两句吧...