目录
1.打开idea,创建Java项目,构建系统选“Maven”
一. 前言
本文介绍一个使用 IntelliJ IDEA 创建 Java JSON 处理项目的完整示例,使用 Jackson 库实现对象与 JSON 的相互转换。
二. 解析
1. 用户模型类 (User.java
)
package com.example.model; // 用户数据模型类 public class User { // 用户属性 private String name; // 姓名 private int age; // 年龄 private String email; // 邮箱 @JsonFormat(pattern = "yyyy/MM/dd") // 日期格式化 private LocalDate registerDate; // 注册日期 private List<String> skills; // 技能列表 // 构造方法 public User() {} // 必须有无参构造器(JSON转换需要) public User(String name, int age, ...) { ... } // 带参构造器 // Getter/Setter方法(用于访问私有属性) public String getName() { return name; } public void setName(String name) { this.name = name; } // ... 其他属性的getter/setter }
核心作用:定义用户数据结构,包含属性和操作方法。
2. JSON工具类 (JsonUtils.java
)
package com.example.util; // JSON处理工具 public class JsonUtils { // 创建并配置Jackson的核心转换器 private static ObjectMapper createMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); // 支持Java8时间类型 mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // 禁用时间戳 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略未知属性 mapper.enable(SerializationFeature.INDENT_OUTPUT); // 美化JSON输出 return mapper; } // 对象 → JSON字符串 public static String toJson(Object obj) { ... } // JSON字符串 → 对象 public static <T> T fromJson(String json, Class<T> clazz) { ... } // 自定义JSON异常处理 public static class JsonException extends RuntimeException { ... } }
核心作用:提供JSON与Java对象的双向转换功能。
3. 主程序 (Main.java
)
package com.example; // 程序入口 public class Main { public static void main(String[] args) { // 1. 创建测试用户 User user = createTestUser(); // 2. 对象转JSON(序列化) String json = JsonUtils.toJson(user); System.out.println("序列化结果:\n" + json); // 3. JSON转对象(反序列化) User parsedUser = JsonUtils.fromJson(inputJson, User.class); // 4. 打印结果 printUserInfo(parsedUser); } // 辅助方法:创建测试用户 private static User createTestUser() { ... } // 辅助方法:打印用户信息 private static void printUserInfo(User user) { ... } }
核心流程:
-
创建用户对象 → 2. 转换为JSON → 3. 解析JSON → 4. 输出结果
4. 依赖配置 (pom.xml
)
<dependencies> <!-- Jackson核心库 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- Java8时间支持 --> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 打包可执行JAR --> <plugin> <configuration> <mainClass>com.example.Main</mainClass> </configuration> </plugin> </plugins> </build>
核心作用:管理第三方库依赖和项目构建配置。
代码关系图解
Main.java │ ├─ 创建 → User对象 │ │ │ ↓ ├─ 使用 → JsonUtils.toJson() → 生成JSON │ ├─ 使用 → JsonUtils.fromJson() → 解析JSON → 创建新User对象 │ └─ 打印结果
三. 特点
-
结构化设计:模型/工具/主程序分离
-
安全处理:忽略未知JSON字段
-
日期支持:Java 8时间类型处理
-
易读输出:格式化JSON美化
-
错误处理:自定义异常封装
-
简洁接口:静态工具方法调用
四. 技巧
-
格式化 JSON:任意 JSON 字符串粘到 IDEA →
Ctrl + Alt + L
自动美化。 -
快速生成 JSON:安装插件 java2json,在类名上右键 MakeJson 即可把字段模板一键生成 JSON 样例。
-
Scratch 文件:IDEA 内按
Ctrl+Shift+Alt+Insert
→ 选 JSON 可临时写/校验 JSON 而不污染项目。
五. 步骤
1.打开idea,创建Java项目,构建系统选“Maven”
2.pom.xml文件内容如下
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>json-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<jackson.version>2.15.3</jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.项目结构如下
4.三个类文件内容如下
package com.example.model;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.time.LocalDate;
import java.util.List;
@JsonInclude(JsonInclude.Include.NON_NULL) // 忽略null字段
public class User {
private String name;
private int age;
private String email;
@JsonFormat(pattern = "yyyy/MM/dd")
private LocalDate registerDate;
private List<String> skills;
// 必须有无参构造器
public User() {}
public User(String name, int age, String email, LocalDate registerDate, List<String> skills) {
this.name = name;
this.age = age;
this.email = email;
this.registerDate = registerDate;
this.skills = skills;
}
// Getter 和 Setter (IDEA 自动生成: Alt+Insert)
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 getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public LocalDate getRegisterDate() {
return registerDate;
}
public void setRegisterDate(LocalDate registerDate) {
this.registerDate = registerDate;
}
public List<String> getSkills() {
return skills;
}
public void setSkills(List<String> skills) {
this.skills = skills;
}
}
package com.example.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
public class JsonUtils {
private static final ObjectMapper mapper = createMapper();
private static ObjectMapper createMapper() {
ObjectMapper mapper = new ObjectMapper();
// 配置常用设置
mapper.registerModule(new JavaTimeModule()); // 支持Java8时间类型
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.enable(SerializationFeature.INDENT_OUTPUT); // 美化输出
return mapper;
}
// 对象转JSON字符串
public static String toJson(Object obj) {
try {
return mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
throw new JsonException("JSON serialization failed", e);
}
}
// JSON字符串转对象
public static <T> T fromJson(String json, Class<T> clazz) {
try {
return mapper.readValue(json, clazz);
} catch (JsonProcessingException e) {
throw new JsonException("JSON deserialization failed", e);
}
}
// 自定义JSON异常
public static class JsonException extends RuntimeException {
public JsonException(String message, Throwable cause) {
super(message, cause);
}
}
}
package com.example;
import com.example.model.User;
import com.example.util.JsonUtils;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 创建测试用户
User user = createTestUser();
// 对象 → JSON
String json = JsonUtils.toJson(user);
System.out.println("=== 序列化结果 ===");
System.out.println(json);
// JSON → 对象
String inputJson = "{\"name\":\"李四\",\"age\":32,\"email\":\"lisi@test.com\"," +
"\"registerDate\":\"2022/11/15\",\"skills\":[\"Python\",\"Docker\"]}";
User parsedUser = JsonUtils.fromJson(inputJson, User.class);
System.out.println("\n=== 反序列化结果 ===");
printUserInfo(parsedUser);
}
private static User createTestUser() {
return new User(
"张三",
28,
"zhangsan@example.com",
LocalDate.of(2023, 5, 20),
Arrays.asList("Java", "Spring", "SQL")
);
}
private static void printUserInfo(User user) {
System.out.println("姓名: " + user.getName());
System.out.println("年龄: " + user.getAge());
System.out.println("邮箱: " + user.getEmail());
System.out.println("注册日期: " + user.getRegisterDate());
System.out.println("技能: " + user.getSkills());
}
}