上一篇
Java如何读取JSON文件内容?
- 后端开发
- 2025-06-27
- 2714
在Java中读取JSON文件,常用Jackson或Gson库,以Jackson为例:创建ObjectMapper实例,调用readValue()方法,指定JSON文件路径和目标类(如Map、自定义POJO或JsonNode),需处理IOException和JsonProcessingException异常。
在Java中读取JSON文件内容,可通过多种库实现,以下是两种主流方法(使用org.json和Google Gson),包含详细步骤和代码示例:
准备工作:添加依赖
org.json库(官方轻量级库)
Maven:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20251013</version>
</dependency>
Gradle:
implementation 'org.json:json:20251013'
Google Gson库(推荐,支持对象映射)
Maven:

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
Gradle:
implementation 'com.google.code.gson:gson:2.10.1'
方法1:使用org.json库
步骤:
- 读取JSON文件为字符串
- 将字符串解析为
JSONObject或JSONArray - 提取数据
示例代码:
import org.json.JSONArray;
import org.json.JSONObject;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ReadJsonOrgJson {
public static void main(String[] args) {
try {
// 1. 读取文件内容到字符串
String content = new String(Files.readAllBytes(Paths.get("data.json")));
// 2. 解析JSON(根据根结构选择JSONObject或JSONArray)
JSONObject root = new JSONObject(content); // 根为{}
// JSONArray root = new JSONArray(content); // 根为[]
// 3. 提取数据(示例:获取name字段)
String name = root.getString("name");
System.out.println("Name: " + name);
// 4. 遍历数组(示例:hobbies数组)
JSONArray hobbies = root.getJSONArray("hobbies");
for (int i = 0; i < hobbies.length(); i++) {
System.out.println("Hobby: " + hobbies.getString(i));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
适用场景:简单JSON结构、无需对象映射。

方法2:使用Google Gson库
步骤:
- 创建
Gson实例 - 通过
JsonReader解析文件流(推荐避免内存溢出) - 直接映射到Java对象(可选)
示例代码(流式解析):
import com.google.gson.stream.JsonReader;
import java.io.FileReader;
public class ReadJsonGson {
public static void main(String[] args) {
try (JsonReader reader = new JsonReader(new FileReader("data.json"))) {
reader.beginObject(); // 根为{},如果是数组用beginArray()
while (reader.hasNext()) {
String key = reader.nextName();
if (key.equals("name")) {
String name = reader.nextString();
System.out.println("Name: " + name);
} else if (key.equals("age")) {
int age = reader.nextInt();
System.out.println("Age: " + age);
} else {
reader.skipValue(); // 跳过未知字段
}
}
reader.endObject();
} catch (Exception e) {
e.printStackTrace();
}
}
}
示例代码(对象映射):
import com.google.gson.Gson;
import java.nio.file.Files;
import java.nio.file.Paths;
// 定义Java类匹配JSON结构
class User {
String name;
int age;
String[] hobbies;
}
public class ReadJsonGsonObject {
public static void main(String[] args) {
try {
String json = new String(Files.readAllBytes(Paths.get("data.json")));
Gson gson = new Gson();
User user = gson.fromJson(json, User.class); // 自动映射字段
System.out.println("Name: " + user.name);
for (String hobby : user.hobbies) {
System.out.println("Hobby: " + hobby);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
优势:

- 流式解析节省内存(大文件推荐)
- 对象映射减少手动解析代码
常见问题解决
- 文件路径错误:
- 使用绝对路径(如
C:/data.json)或正确相对路径(项目根目录起始)。
- 使用绝对路径(如
- JSON格式错误:
- 验证JSON合法性(JSONLint)。
- 特殊字符编码:
- 指定编码:
new String(Files.readAllBytes(path), StandardCharsets.UTF_8)。
- 指定编码:
- 内存不足:
- 大文件用
Gson的JsonReader流式解析。
- 大文件用
总结建议
- 轻量级需求:选
org.json,无需复杂配置。 - 复杂JSON或对象映射:选
Gson,支持流式处理和自动转换。 - 最佳实践:
- 始终用
try-catch处理IOException和JSONException。 - 大文件优先使用流式解析(
JsonReader)。 - 字段匹配严格时,用
@SerializedName注解(Gson支持)。
- 始终用
引用说明:
- org.json官方文档:GitHub – stleary/JSON-java
- Google Gson文档:Gson User Guide
- Java NIO文件API:Oracle Java Files
