Java读取JSON文件并将其中元素转为JSON对象输出的方式

 更新时间:2025年10月11日 08:47:57   作者:岫珩  
这篇文章主要介绍了Java读取JSON文件并将其中元素转为JSON对象输出的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java读取JSON文件将元素转JSON对象输出

1. 需求描述

本地有一个json文件,内容为数组,数组中的每个元素都是json对象,即键值形式

如文件test.json

[
	{"123":"libai","245":"zhangfei","444":"qipa"},
	{"133":"libi","205":"zhanfei","494":"qipai"}
]

现在想要将test.json文件中的每个元素读出来并转为json对象输出

2. 所需依赖

在pom中添加依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

3. 代码

完整代码内容如下

package com.xiucong.vihicle;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * @func:
 * @author: LiBai
 * @version: v1.0
 * @createTime: 2025/4/15 15:14
 */
public class ExcelInsertRecordsController {

    public static void main(String[] args) {

        // JSON文件路径
        String filePath = "D:\\xiucong\\test.json";
        File file = new File(filePath);

        try {
            // 读取文件内容为字符串
            String content = new String(Files.readAllBytes(Paths.get(file.getPath())));

            // 将字符串解析为JSONArray对象
            JSONArray jsonArray = JSON.parseArray(content);

            // 打印数组内容,以验证结果
            for (int i = 0; i < jsonArray.size(); i++) {
                // System.out.println(jsonArray.get(i));
                JSONObject obj = (JSONObject) jsonArray.get(i);
                System.out.println(i+"==============================================>");

            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}

Java读取JSON文件并解析为JSON对象的拓展

以下是一个详细的Java读取JSON文件并转换为JSON对象的实现步骤,涵盖不同场景和常用库(如Jackson、Gson、JSON-java)的使用方法:

1. 准备工作

依赖库选择

Jackson:高性能,Spring Boot默认集成(推荐)

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>

Gson:Google的JSON库,轻量级

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

JSON-java:官方JSON库(功能较基础)

// JDK 内置(JDK 11+)
// 或手动引入:
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>

2. 使用Jackson解析JSON文件

步骤1:读取文件内容

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class ReadJsonFile {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            // 从文件路径读取JSON
            JsonNode rootNode = mapper.readTree(new File("data.json"));
            
            // 直接输出整个JSON对象
            System.out.println(rootNode.toPrettyString());

            // 访问具体字段
            String name = rootNode.get("name").asText();
            int age = rootNode.get("age").asInt();
            System.out.println("Name: " + name + ", Age: " + age);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

步骤2:反序列化为Java对象

定义Java类:

public class User {
    private String name;
    private int age;
    private List<String> hobbies;
    
    // 必须有无参构造器和getter/setter
    // ...
}

解析代码:

User user = mapper.readValue(new File("data.json"), User.class);
System.out.println(user.getHobbies());

3. 使用Gson解析JSON文件

步骤1:读取并解析

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public class GsonExample {
    public static void main(String[] args) {
        Gson gson = new Gson();
        try {
            // 读取文件内容为字符串
            String jsonStr = Files.readString(Paths.get("data.json"));
            
            // 转换为JsonObject
            JsonObject jsonObject = JsonParser.parseString(jsonStr).getAsJsonObject();
            
            // 访问字段
            String name = jsonObject.get("name").getAsString();
            System.out.println("Name: " + name);

            // 反序列化为对象
            User user = gson.fromJson(jsonStr, User.class);
            System.out.println(user.getAge());

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. 使用JSON-java(org.json)解析

import org.json.JSONObject;
import org.json.JSONTokener;

public class JsonOrgExample {
    public static void main(String[] args) {
        try (FileReader reader = new FileReader("data.json")) {
            // 从文件读取JSON
            JSONObject jsonObject = new JSONObject(new JSONTokener(reader));
            
            // 访问字段
            String name = jsonObject.getString("name");
            JSONArray hobbies = jsonObject.getJSONArray("hobbies");
            
            System.out.println("Hobbies: " + hobbies.toString(2)); // 格式化输出

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5. 处理复杂JSON结构

示例JSON文件(data.json)

{
  "name": "Alice",
  "age": 30,
  "hobbies": ["Reading", "Hiking"],
  "address": {
    "city": "Shanghai",
    "postcode": "200000"
  }
}

访问嵌套对象(Jackson示例)

JsonNode addressNode = rootNode.get("address");
String city = addressNode.get("city").asText();

遍历数组

JsonNode hobbies = rootNode.get("hobbies");
hobbies.forEach(hobby -> System.out.println(hobby.asText()));

6. 异常处理与最佳实践

文件路径问题

  • 使用绝对路径或相对路径(相对于项目根目录)
  • 文件不存在时捕获 FileNotFoundException

JSON格式校验

  • 确保JSON文件语法正确(可用在线工具如JSONLint验证)

性能优化

  • 大文件使用Jackson的流式API(JsonParser)逐行解析
  • 复用 ObjectMapper 实例(线程安全)

7. 完整代码示例(Jackson版)

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;

public class JsonReader {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            JsonNode root = mapper.readTree(new File("data.json"));
            
            // 输出完整JSON
            System.out.println("完整JSON内容:\n" + root.toPrettyString());
            
            // 提取嵌套字段
            String city = root.get("address").get("city").asText();
            System.out.println("城市: " + city);
            
            // 遍历数组
            System.out.println("爱好:");
            root.get("hobbies").forEach(hobby -> 
                System.out.println(" - " + hobby.asText())
            );

        } catch (IOException e) {
            System.err.println("读取文件失败: " + e.getMessage());
        }
    }
}

总结

  • 推荐库:优先选择 Jackson(性能好、功能全)或 Gson(简洁易用)
  • 关键步骤:读取文件 → 解析为JSON对象 → 按需提取数据
  • 适用场景:配置文件解析、API响应处理、数据导入导出等

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot实现异步消息处理的代码示例

    SpringBoot实现异步消息处理的代码示例

    在现代应用程序中,异步消息处理是一项至关重要的任务。它可以提高应用程序的性能、可伸缩性和可靠性,同时也可以提供更好的用户体验,本文将介绍如何使用Spring Boot实现异步消息处理,并提供相应的代码示例
    2023-06-06
  • 如何理解SpringMVC

    如何理解SpringMVC

    Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发
    2021-06-06
  • 一文带你深入认识JAVA中的异常

    一文带你深入认识JAVA中的异常

    Java异常处理成为社区中讨论最多的话题之一,下面这篇文章主要给大家介绍了关于JAVA中异常的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用java具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-06-06
  • Mybatis防止sql注入的实例

    Mybatis防止sql注入的实例

    本文通过实例给大家介绍了Mybatis防止sql注入的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-06-06
  • 使用springmvc运行流程分析,手写spring框架尝试

    使用springmvc运行流程分析,手写spring框架尝试

    这篇文章主要介绍了使用springmvc运行流程分析,手写spring框架尝试,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • IDEA使用JDBC安装配置jar包连接MySQL数据库

    IDEA使用JDBC安装配置jar包连接MySQL数据库

    这篇文章介绍了IDEA使用JDBC安装配置jar包连接MySQL数据库的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • java实现微信扫码登录第三方网站功能(原理和代码)

    java实现微信扫码登录第三方网站功能(原理和代码)

    为避免繁琐的注册登陆,很多平台和网站都会实现三方登陆的功能,增强用户的粘性。这篇文章主要介绍了java实现微信扫码登录第三方网站功能(原理和代码),避免做微信登录开发的朋友们少走弯路
    2022-12-12
  • 浅谈java实现重载的方法

    浅谈java实现重载的方法

    方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
    2015-09-09
  • Java中Maven Shade插件的具体使用

    Java中Maven Shade插件的具体使用

    Maven Shade插件它可以帮助你在构建项目时打包所有依赖项,并将其打包到一个单独的JAR文件中,本文就介绍一下Maven Shade插件的具体使用,具有一定参考价值,感兴趣的可以了解一下
    2023-08-08
  • 解决nacos启动报错Server check fail, please check server localhost ,port 9848 is available的问题

    解决nacos启动报错Server check fail, please che

    这篇文章主要介绍了nacos启动 Server check fail, please check server localhost ,port 9848 is available的错误原因以及解决方法,需要的朋友可以参考下
    2023-09-09

最新评论