Java中使用JSON解析的全面指南
在Java开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其易读、易解析的特性,被广泛应用于前后端数据交互、配置文件存储、API响应解析等场景,本文将详细介绍Java中如何使用JSON进行解析,涵盖主流库(如Gson、Jackson、org.json)的使用方法、核心功能及实践案例。
JSON与Java的映射关系
JSON数据结构主要有两种形式:对象(Object)和数组(Array),在Java中,JSON对象通常对应Map或自定义类(POJO/JavaBean),JSON数组则对应List或数组类型,理解这种映射关系是JSON解析的基础:
| JSON类型 | Java类型示例 |
|---|---|
| 对象 | Map<String, Object>、自定义类 |
数组 [] |
List<Object>、数组(如String[]) |
| 字符串 | String |
数字 123 |
Integer、Long、Double等 |
布尔 true/false |
Boolean |
空值 null |
null |
主流JSON解析库对比
Java生态中有多种JSON处理库,最常用的包括:
| 库名称 | 维护方 | 特点 | 适用场景 |
|---|---|---|---|
| Gson | 简单易用,支持复杂对象与泛型,无需注解 | 轻量级解析、Android开发 | |
| Jackson | FasterXML | 性能高,功能强大,支持流式解析 | 企业级应用、高性能场景 |
| org.json | JSON.org | 轻量级,API简洁,但功能相对有限 | 简单JSON处理 |
本文将重点介绍Gson和Jackson的使用,兼顾org.json的基础操作。
使用Gson解析JSON
Gson是Google开源的JSON处理库,核心类是com.google.gson.Gson,提供从JSON到Java对象的转换(反序列化)和Java对象到JSON的转换(序列化)。
添加依赖
Maven项目中添加:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 建议使用最新版本 -->
</dependency>
基础解析:JSON字符串转Java对象
(1)简单JSON转基本类型/字符串
import com.google.gson.Gson;
public class GsonBasicParse {
public static void main(String[] args) {
String jsonStr = "\"name\":\"张三\",\"age\":25,\"isStudent\":true";
Gson gson = new Gson();
String name = gson.fromJson(jsonStr, String.class); // 解析JSON字符串字段
int age = gson.fromJson(jsonStr, int.class); // 解析JSON数字字段
boolean isStudent = gson.fromJson(jsonStr, boolean.class); // 解析JSON布尔字段
System.out.println("姓名: " + name); // 输出: 姓名: 张三
System.out.println("年龄: " + age); // 输出: 年龄: 25
System.out.println("是否学生: " + isStudent); // 输出: 是否学生: true
}
}
(2)JSON对象转自定义类(POJO)
定义Java类与JSON字段对应:
public class User {
private String name;
private int age;
private boolean isStudent;
// 无参构造器(Gson反序列化时需要)
public User() {}
// 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 boolean isStudent() { return isStudent; }
public void setStudent(boolean student) { isStudent = student; }
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + ", isStudent=" + isStudent + "}";
}
}
解析JSON字符串到User对象:
import com.google.gson.Gson;
public class GsonPojoParse {
public static void main(String[] args) {
String jsonStr = "{\"name\":\"李四\",\"age\":22,\"isStudent\":true}";
Gson gson = new Gson();
User user = gson.fromJson(jsonStr, User.class);
System.out.println(user); // 输出: User{name='李四', age=22, isStudent=true}
}
}
(3)JSON数组转List
import com.google.gson.Gson;
import java.util.List;
public class GsonListParse {
public static void main(String[] args) {
String jsonArrayStr = "[{\"name\":\"王五\",\"age\":20},{\"name\":\"赵六\",\"age\":23}]";
Gson gson = new Gson();
// 使用TypeToken指定List泛型类型
List<User> userList = gson.fromJson(jsonArrayStr, new TypeToken<List<User>>() {}.getType());
userList.forEach(System.out::println);
/* 输出:
User{name='王五', age=20, isStudent=false}
User{name='赵六', age=23, isStudent=false}
*/
}
}
高级功能:自定义解析与注解
(1)字段映射注解
@SerializedName:解决JSON字段名与Java字段名不一致的问题。public class User { @SerializedName("username") // JSON字段为"username",Java字段为"name" private String name; // 其他字段... }
(2)日期格式处理
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Date;
public class GsonDateParse {
public static void main(String[] args) {
String jsonStr = "{\"name\":\"陈七\",\"birthDate\":\"1995-08-10\"}";
// 创建Gson实例并注册日期格式
Gson gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd") // 指定日期格式
.create();
User user = gson.fromJson(jsonStr, User.class);
System.out.println(user.getBirthDate()); // 输出: Sun Aug 10 00:00:00 CST 1995
}
}
使用Jackson解析JSON
Jackson是高性能的JSON处理库,核心类是com.fasterxml.jackson.databind.ObjectMapper,功能更全面,支持流式解析、树模型等高级特性。
添加依赖
Maven项目中添加:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 建议使用最新版本 -->
</dependency>
基础解析:JSON字符串转Java对象
(1)简单JSON转基本类型
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonBasicParse {
public static void main(String[] args) throws Exception {
String jsonStr = "\"message\":\"操作成功\",\"code\":200";
ObjectMapper mapper = new ObjectMapper();
String message = mapper.readValue(jsonStr, String.class);
int code = mapper.readValue(jsonStr, int.class);
System.out.println("消息: " + message); // 输出: 消息: 操作成功
System.out.println("状态码: " + code); // 输出: 状态码: 200
}
}
(2)JSON对象转自定义类
与Gson类似,Jackson会自动匹配JSON字段与Java类的字段名(驼峰命名):
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonPojoParse {
public static void main(String[] args) throws Exception {
String jsonStr = "{\"name\":\"周八\",\"age\":21,\"isStudent\":false}";
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(jsonStr, User.class);
System.out.println(user); // 输出: User{name='周八', age=21, isStudent=false}
}
}
(3)JSON数组转List
使用TypeReference指定泛型类型:
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
public class JacksonListParse {
public static void main(String[] args) throws Exception {
String jsonArrayStr = "[{\"name\":\"吴九\",\"age\":19},{\"name\":\"郑十\",\"age\":24}]";
ObjectMapper mapper = new ObjectMapper();
List<User> userList = mapper.readValue(
jsonArrayStr,
new TypeReference<List<User>>() {}
);
userList.forEach(System.out::println);
}
}
高级
抖音足球直播
抖音足球直播
企鹅直播
企鹅直播
足球直播
爱奇艺直播
爱奇艺足球直播
足球直播
足球直播
iqiyi直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
QQ足球直播
QQ足球直播
足球直播
足球直播
快连
快连
快连
快连下载
快连
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播
有道翻译
有道翻译
有道翻译
有道翻译
wps
wps
wps
wps
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
新浪足球直播
新浪足球直播
足球直播
足球直播



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