Java读取JSON数据全面指南:从基础到实践**
JSON(JavaScript Object Notation)作为一种轻量级、易读易写的数据交换格式,在现代软件开发中得到了广泛应用,尤其是在Java后端服务与前端、第三方API交互时,Java中读取JSON数据有多种方式,选择合适的方法能提高开发效率和代码可维护性,本文将详细介绍几种主流的Java读取JSON的方法,包括使用标准库、第三方库如Gson、Jackson以及org.json等。
为什么需要读取JSON数据?
在实际开发中,我们经常需要从以下来源读取JSON数据:
- HTTP响应:调用RESTful API时,服务器通常返回JSON格式的响应体。
- 配置文件:许多项目使用JSON文件作为配置文件(如
config.json)。 - 数据存储:NoSQL数据库(如MongoDB)常以JSON格式存储数据。
- 用户输入:前端表单提交的数据可能以JSON格式传输。
Java读取JSON数据是一项必备技能。
Java读取JSON的常用方法
使用Java标准库 (javax.json / org.json - Java EE / Jakarta EE)
Java EE 7及以上版本引入了javax.jsonAPI(在Jakarta EE中为jakarta.json),提供了处理JSON的API,如果使用较早版本或不想引入额外依赖,可以考虑org.json库(非标准,但广泛使用,需单独引入jar包)。
示例(使用javax.json - 假设环境支持Java EE 7+):
确保你的项目环境中包含javax.json API(在Java EE应用服务器中,或添加如jakarta.json-api的依赖)。
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
import java.io.StringReader;
public class JavaxJsonReader {
public static void main(String[] args) {
String jsonString = "{\"name\":\"张三\",\"age\":30,\"isStudent\":false,\"courses\":[\"Java\",\"Python\"]}";
try (JsonReader reader = Json.createReader(new StringReader(jsonString))) {
JsonObject jsonObject = reader.readObject();
// 读取简单值
String name = jsonObject.getString("name");
int age = jsonObject.getInt("age");
boolean isStudent = jsonObject.getBoolean("isStudent");
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("是否学生: " + isStudent);
// 读取数组
System.out.print("课程: ");
jsonObject.getJsonArray("courses").forEach(item -> {
System.out.print(item.toString() + " ");
});
System.out.println();
} catch (Exception e) {
e.printStackTrace();
}
}
}
特点:
- 标准API,无需额外引入第三方库(如果环境支持)。
- API相对简洁,适合处理简单的JSON结构。
- 对于复杂嵌套JSON,处理起来可能略显繁琐。
使用Gson库(Google)
Gson是Google开发的一个Java库,用于将Java对象转换为JSON表示(序列化),也可以将JSON字符串转换为Java对象(反序列化),它非常强大且易于使用。
添加Gson依赖(Maven):
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- 请使用最新版本 -->
</dependency>
示例1:将JSON字符串解析为JsonObject(类似Map的结构)
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class GsonJsonObjectReader {
public static void main(String[] args) {
String jsonString = "{\"name\":\"李四\",\"age\":25,\"city\":\"北京\"}";
JsonParser parser = new JsonParser();
JsonObject jsonObject = parser.parse(jsonString).getAsJsonObject();
String name = jsonObject.get("name").getAsString();
int age = jsonObject.get("age").getAsInt();
String city = jsonObject.get("city").getAsString();
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.println("城市: " + city);
}
}
示例2:将JSON字符串直接解析为Java对象(POJO)
这是Gson最常用的方式之一。
import com.google.gson.Gson;
// 1. 定义一个与JSON结构对应的Java类(POJO)
class User {
private String name;
private int age;
private String city;
// 需要无参构造函数
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 String getCity() { return city; }
public void setCity(String city) { this.city = city; }
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + ", city='" + city + "'}";
}
}
public class GsonPojoReader {
public static void main(String[] args) {
String jsonString = "{\"name\":\"王五\",\"age\":28,\"city\":\"上海\"}";
Gson gson = new Gson();
User user = gson.fromJson(jsonString, User.class);
System.out.println(user);
System.out.println("姓名: " + user.getName());
System.out.println("年龄: " + user.getAge());
}
}
特点:
- 非常流行,文档完善,社区活跃。
- 支持将JSON直接转换为Java对象(POJO),代码更面向对象。
- 支持复杂类型、泛型、自定义序列化/反序列化等。
使用Jackson库
Jackson是另一个非常流行且功能强大的Java JSON库,性能优异,被许多知名框架(如Spring)作为默认的JSON处理库。
添加Jackson核心依赖(Maven):
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.2</version> <!-- 请使用最新版本 -->
</dependency>
(jackson-databind会自动引入jackson-core和jackson-annotations)
示例1:将JSON字符串解析为JsonNode(类似树形结构)
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonJsonNodeReader {
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\":\"赵六\",\"age\":32,\"hobbies\":[\"阅读\",\"旅行\"]}";
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(jsonString);
String name = jsonNode.get("name").asText();
int age = jsonNode.get("age").asInt();
JsonNode hobbiesNode = jsonNode.get("hobbies");
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
System.out.print("爱好: ");
hobbiesNode.forEach(hobby -> System.out.print(hobby.asText() + " "));
System.out.println();
}
}
示例2:将JSON字符串解析为Java对象(POJO)
import com.fasterxml.jackson.databind.ObjectMapper;
// 复用上面定义的User类
class User {
private String name;
private int age;
private String city;
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 String getCity() { return city; }
public void setCity(String city) { this.city = city; }
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + ", city='" + city + "'}";
}
}
public class JacksonPojoReader {
public static void main(String[] args) throws Exception {
String jsonString = "{\"name\":\"钱七\",\"age\":35,\"city\":\"广州\"}";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(jsonString, User.class);
System.out.println(user);
}
}
特点:
- 性能极佳,功能强大。
- 提供了树模型(JsonNode)、数据绑定(POJO)、流式API等多种处理方式。
- 与Spring框架集成良好。
- 注解丰富,可以灵活控制JSON与Java对象的映射。
使用org.json库(非标准,但简单)
这是一个轻量级的JSON处理库,使用简单,但不是Java标准库的一部分。
添加org.json依赖(Maven):
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<


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