Java如何读取JSON文件内容?

Java中读取JSON文件,常用Jackson或Gson库,以Jackson为例:创建ObjectMapper实例,调用readValue()方法,指定JSON文件路径和目标类(如Map、自定义POJO或JsonNode),需处理IOException和JsonProcessingException异常。

Java中读取JSON文件内容,可通过多种库实现,以下是两种主流方法(使用org.jsonGoogle Gson),包含详细步骤和代码示例:

Java如何读取JSON文件内容?


准备工作:添加依赖

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

Java如何读取JSON文件内容?

implementation 'com.google.code.gson:gson:2.10.1'

方法1:使用org.json库

步骤:

  1. 读取JSON文件为字符串
  2. 将字符串解析为JSONObjectJSONArray
  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对象(可选)

示例代码(流式解析)

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

示例代码(对象映射)

Java如何读取JSON文件内容?

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. 内存不足
    • 大文件用GsonJsonReader流式解析。

总结建议

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

引用说明

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/40204.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月27日 17:02
下一篇 2025年6月8日 15:32

相关推荐

  • 如何在Java Web中新建Maven项目?

    在JavaWeb中新建Maven项目:使用IDE(如IntelliJ或Eclipse)选择Maven项目模板,设置GroupId、ArtifactId和版本号,选择maven-archetype-webapp原型,完成后自动生成标准目录结构(src/main/webapp等),并在pom.xml中添加Servlet等依赖即可构建Web应用基础框架。

    2025年6月19日
    200
  • 用java怎么编程语言

    Java是一种面向对象的高级编程语言,以其跨平台性、健壮性和安全性著称,它通过JVM实现“一次编写,到处运行”,广泛应用于企业级应用、移动开发和大数据领域,语法简洁清晰,支持多线程和网络编程,拥有庞大的开源生态。

    2025年6月27日
    000
  • Java空心三角形怎么打印

    使用循环控制行数和空格数,第一行打印一个星号,中间行打印两个星号(中间用空格隔开),最后一行打印连续星号,形成空心三角形,核心代码:,“`java,int n = 5; // 行数,for (int i = 1; i

    2025年6月17日
    100
  • Java如何获取文本框内容?

    在Java中读取文本框内容,通常使用Swing组件的getText()方法,对JTextField或JTextArea对象调用textField.getText()即可获取输入文本,需结合事件监听(如按钮点击)触发读取操作,确保实时获取用户输入的数据。

    2025年6月14日
    200
  • Java如何安装JDK1.7?

    在Java开发环境中添加JDK 1.7需配置环境变量:设置JAVA_HOME指向JDK安装目录,并在Path变量中添加%JAVA_HOME%\bin,IDE中需在项目设置或全局首选项里指定JDK 1.7为编译环境。

    2025年6月22日
    100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN