当前位置:首页 > 后端开发 > 正文

Java如何读取JSON文件内容?

在 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

Google Gson库(推荐,支持对象映射)

Maven

<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>

Gradle

Java如何读取JSON文件内容? 第1张

方法1:使用org.json库

步骤:

  1. 读取JSON文件为字符串
  2. 将字符串解析为JSONObject或JSONArray
  3. 提取数据

示例代码

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库

步骤:

  1. 创建Gson实例
  2. 通过JsonReader解析文件流(推荐避免内存溢出)
  3. 直接映射到Java对象(可选)

示例代码(流式解析)

Java如何读取JSON文件内容? 第2张

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(); } } }

优势

  • 流式解析节省内存(大文件推荐)
  • 对象映射减少手动解析代码


常见问题解决

  1. 文件路径错误
    • 使用绝对路径(如C:/data.json)或正确相对路径(项目根目录起始)。
  2. JSON格式错误
  3. 特殊字符编码
    • 指定编码:new String(Files.readAllBytes(path), StandardCharsets.UTF_8)。
  4. 内存不足
    • 大文件用Gson的JsonReader流式解析。


总结建议

  • 轻量级需求:选org.json,无需复杂配置。
  • 复杂JSON或对象映射:选Gson,支持流式处理和自动转换。
  • 最佳实践
    • 始终用try-catch处理IOException和JSONException。
    • 大文件优先使用流式解析(JsonReader)。
    • 字段匹配严格时,用@SerializedName注解(Gson支持)。

引用说明

Java如何读取JSON文件内容? 第3张

0