Java中引入和使用JSON的全面指南
Java中引入和使用JSON的全面指南:从基础库到第三方工具
JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因易读性强、解析高效等优点,已成为Java开发中与前后端交互、配置文件存储、数据序列化等场景的核心工具,本文将详细介绍Java中引入和使用JSON的多种方式,涵盖标准库、主流第三方工具(如Gson、Jackson、Fastjson)及Spring Boot内置支持,帮助开发者根据实际需求选择合适的方案。
Java标准库:org.json
Java标准库从Java EE 7开始引入了javax.json包(后迁移至jakarta.json),提供了基础的JSON处理能力,无需额外依赖,适合轻量级场景。
1 引入依赖
若使用Java EE 8+或Jakarta EE 8+,可直接通过JDK模块加载(需JDK 9+模块化支持);若使用早期版本,需添加以下依赖(以Maven为例):
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.json</artifactId>
<version>2.0.1</version>
</dependency>
2 基本使用
(1)创建JSON对象
import jakarta.json.Json;
import jakarta.json.JsonObject;
import jakarta.json.JsonReader;
// 创建JSON对象
JsonObject jsonObject = Json.createObjectBuilder()
.add("name", "张三")
.add("age", 25)
.add("isStudent", true)
.add("courses", Json.createArrayBuilder()
.add("Java")
.add("Python")
.build())
.build();
// 输出JSON字符串
System.out.println(jsonObject.toString());
// 输出:{"name":"张三","age":25,"isStudent":true,"courses":["Java","Python"]}
(2)解析JSON字符串
String jsonStr = "{\"name\":\"李四\",\"age\":30,\"city\":\"北京\"}";
try (JsonReader reader = Json.createReader(new StringReader(jsonStr))) {
JsonObject parsedObject = reader.readObject();
String name = parsedObject.getString("name");
int age = parsedObject.getInt("age");
System.out.println("姓名:" + name + ",年龄:" + age);
// 输出:姓名:李四,年龄:30
}
3 优缺点
- 优点:无需额外依赖,适合简单JSON操作;
- 缺点:功能有限(如不支持注解解析/生成)、API较为底层,复杂对象处理繁琐。
第三方工具:Gson(Google)
Gson是Google推出的JSON处理库,以简洁的API和强大的对象映射能力著称,适合需要灵活处理Java对象与JSON互转的场景。
1 引入依赖
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
2 基本使用
(1)Java对象转JSON(序列化)
import com.google.gson.Gson;
class User {
private String name;
private int age;
// 必须有无参构造方法
public User() {}
public User(String name, int age) {
this.name = name;
this.age = age;
}
// Getter/Setter(可省略,Gson通过反射访问字段)
public String getName() { return name; }
public int getAge() { return age; }
}
public class GsonDemo {
public static void main(String[] args) {
User user = new User("王五", 28);
Gson gson = new Gson();
// 对象转JSON字符串
String jsonStr = gson.toJson(user);
System.out.println(jsonStr);
// 输出:{"name":"王五","age":28}
}
}
(2)JSON转Java对象(反序列化)
String jsonStr = "{\"name\":\"赵六\",\"age\":35}";
Gson gson = new Gson();
User user = gson.fromJson(jsonStr, User.class);
System.out.println("姓名:" + user.getName() + ",年龄:" + user.getAge());
// 输出:姓名:赵六,年龄:35
(3)复杂对象处理(List/Map/嵌套对象)
// 处理List
List<User> userList = Arrays.asList(
new User("张三", 25),
new User("李四", 30)
);
String jsonList = gson.toJson(userList);
System.out.println(jsonList);
// 输出:[{"name":"张三","age":25},{"name":"李四","age":30}]
List<User> parsedList = gson.fromJson(jsonList, new TypeToken<List<User>>(){}.getType());
System.out.println(parsedList.get(0).getName()); // 输出:张三
3 高级特性
- 注解支持:通过
@SerializedName自定义JSON字段名,@Expose控制序列化字段等; - 格式化:
new GsonBuilder().setPrettyPrinting().create()可输出格式化JSON; - 自定义适配器:实现
JsonSerializer/JsonDeserializer处理特殊类型(如日期)。
第三方工具:Jackson(高性能首选)
Jackson是Java生态中最流行的JSON库,以其高性能、低内存占用和丰富的功能(如支持Spring、Spring Boot)成为许多框架的默认选择。
1 引入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version>
</dependency>
2 基本使用
(1)对象与JSON互转
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
class Student {
private String name;
private int age;
// 无参构造方法(Jackson要求)
public Student() {}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// Getter/Setter
public String getName() { return name; }
public int getAge() { return age; }
}
public class JacksonDemo {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
// 对象转JSON
Student student = new Student("钱七", 22);
String jsonStr = mapper.writeValueAsString(student);
System.out.println(jsonStr);
// 输出:{"name":"钱七","age":22}
// JSON转对象
Student parsedStudent = mapper.readValue(jsonStr, Student.class);
System.out.println(parsedStudent.getName()); // 输出:钱七
}
}
(2)处理复杂类型(List/数组/日期)
// 处理List
List<Student> studentList = Arrays.asList(
new Student("张三", 20),
new Student("李四", 21)
);
String jsonList = mapper.writeValueAsString(studentList);
System.out.println(jsonList);
// 输出:[{"name":"张三","age":20},{"name":"李四","age":21}]
List<Student> parsedList = mapper.readValue(jsonList,
mapper.getTypeFactory().constructCollectionType(List.class, Student.class));
(3)日期处理
import java.util.Date;
class Event {
private String name;
private Date date;
// 构造方法/Getter/Setter
}
// 默认日期格式为时间戳,可自定义格式
ObjectMapper mapper = new ObjectMapper();
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
Event event = new Event("会议", new Date());
String jsonDate = mapper.writeValueAsString(event);
System.out.println(jsonDate);
// 输出:{"name":"会议","date":"2023-10-01 14:30:00"}
3 高级特性
- 注解支持:
@JsonProperty(字段映射)、@JsonIgnore(忽略字段)、@JsonFormat(日期格式)等; - 树模型(JsonNode):类似XML的DOM,支持灵活遍历和修改JSON;
- 流式API(JsonParser/JsonGenerator):高性能处理大文件,适合内存敏感场景。
第三方工具:Fastjson(阿里巴巴)
Fastjson是阿里巴巴开源的高性能JSON库,以“快”为核心优势,在国内Java开发中广泛使用,但需注意版本安全性问题。
1 引入依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version> <!-- 建议使用最新安全版本 -->
</dependency>抖音足球直播
抖音足球直播
企鹅直播
企鹅直播
足球直播
爱奇艺直播
爱奇艺足球直播
足球直播
足球直播
iqiyi直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
快连
快连
快连
快连下载
快连
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播
有道翻译
有道翻译
有道翻译
有道翻译
wps
wps
wps
wps
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播



还没有评论,来说两句吧...