在Java中读取和解析JSON文件的示例代码

 更新时间:2025年06月08日 10:30:29   作者:蟹蟹蟹风流  
我们在日常开发中少不了和JSON数据打交道,JSON是轻量、结构化的数据交换格式,支持跨语言,本文给大家详细介绍了如何在 Java 中读取和解析 JSON 文件,并有详细的代码示例供大家参考,需要的朋友可以参考下

JSON基础概念

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,具有以下核心特征:

  • ​简洁性​​:纯文本格式,易于阅读和编写
  • ​跨语言​​:支持Java/Python/JavaScript等所有主流语言
  • ​高效性​​:比XML减少60%的数据体积
  • ​结构化​​:天然支持对象和数组的嵌套表达

​基本语法规范​

{
  "name": "张三",        // 字符串类型
  "age": 28,            // 数字类型
  "isStudent": false,   // 布尔类型
  "courses": [          // 数组类型
    "Math",
    "Physics"
  ],
  "details": {          // 对象类型
    "address": "北京",
    "email": "zhangsan@example.com"
  }
}

Java 中处理 JSON 方案

主流实现方式分为三类:

  • ​原生解析​​:使用JDK内置的org.json包(需 JDK 9+
  • ​第三方库​​:推荐使用 Google GsonJackson
  • ​轻量级工具​​:json-simple(适合简单场景)

json-simple 库实战

​步骤1:添加依赖​

<!-- Maven配置 -->
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

​步骤2:创建 JSON 对象​

import org.json.simple.JSONObject;

public class JsonCreator {
    public static void main(String[] args) {
        JSONObject person = new JSONObject();
        person.put("name", "李四");
        person.put("age", 30);
        person.put("married", false);
        
        System.out.println(person.toJSONString());
        // 输出:{"name":"李四","age":30,"married":false}
    }
}

​步骤3:解析JSON文件​

import org.json.simple.parser.JSONParser;
import org.json.simple.JSONObject;
import java.io.FileReader;

public class JsonReader {
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();
        
        try (FileReader reader = new FileReader("data.json")) {
            JSONObject jsonObject = (JSONObject) parser.parse(reader);
            
            String name = (String) jsonObject.get("name");
            long age = (Long) jsonObject.get("age");
            System.out.println("姓名:" + name);
            System.out.println("年龄:" + age);
            
            // 解析嵌套数组
            JSONArray courses = (JSONArray) jsonObject.get("courses");
            System.out.println("课程列表:");
            for (Object course : courses) {
                System.out.println("\t- " + course);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

高级解析技巧

​1. 处理复杂嵌套结构​

// 假设JSON结构:
// {
//   "students": [
//     {"name": "王五", "score": 85},
//     {"name": "赵六", "score": 92}
//   ]
// }

JSONArray students = (JSONArray) jsonObject.get("students");
for (Object obj : students) {
    JSONObject student = (JSONObject) obj;
    System.out.println("学生:" + student.get("name") + ",成绩:" + student.get("score"));
}

​2. 类型安全访问​

long safeAge = jsonObject.containsKey("age") 
    ? (Long) jsonObject.get("age") 
    : 0L; // 默认值处理

​3. 文件写入操作​

try (FileWriter file = new FileWriter("output.json")) {
    file.write(jsonObject.toJSONString());
    System.out.println("数据已保存到output.json");
} catch (IOException e) {
    e.printStackTrace();
}

技术选型对比

方案优点缺点
json-simple依赖少/简单场景适用功能有限/性能一般
GsonGoogle官方支持/类型安全学习曲线较陡
Jackson工业级性能/生态完善配置复杂度较高

最佳实践建议

  • ​性能敏感场景​​:优先使用Jackson(基准测试显示其解析速度比Gson快30%)
  • ​微服务架构​​:结合Spring Boot的@RequestBody自动绑定功能
  • ​数据校验​​:使用Hibernate Validator实现Bean Validation
  • ​异常处理​​:统一捕获ParseException并返回标准错误码
// Spring Boot控制器示例
@RestController
public class UserController {
    @PostMapping("/users")
    public ResponseEntity<?> createUser(@Valid @RequestBody UserDto user) {
        // 自动将JSON转换为UserDto对象
        userService.save(user);
        return ResponseEntity.ok("用户创建成功");
    }
}

通过掌握JSON处理技术,可以有效提升系统的数据交互能力,为构建 RESTful API 和微服务架构奠定坚实基础。建议根据项目需求选择合适的解析方案,并注重异常处理和性能优化。

以上就是在Java中读取和解析JSON文件的示例代码的详细内容,更多关于Java读取和解析JSON文件的资料请关注脚本之家其它相关文章!

相关文章

  • 解决Test类中不能使用Autowired注入bean的问题

    解决Test类中不能使用Autowired注入bean的问题

    这篇文章主要介绍了解决Test类中不能使用Autowired注入bean的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • IDEA提示内存不足low memory的错误解决

    IDEA提示内存不足low memory的错误解决

    运行项目变得很卡,这种情况比较能直观感受出来,Idea内存指示器,则需要设置才能看到,本文主要介绍了IDEA提示内存不足low memory的错误解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • JAVA中的OutputStreamWriter流解析

    JAVA中的OutputStreamWriter流解析

    这篇文章主要介绍了JAVA中的OutputStreamWriter流解析,OutputStreamWriter提供了一种方便的方式将字符数据写入到输出流中,并进行字符编码转换,它是Java中处理字符流和字节流之间转换的重要工具之一,需要的朋友可以参考下
    2023-10-10
  • Maven管理多模块应用的统一版本号实现

    Maven管理多模块应用的统一版本号实现

    本文主要介绍了Maven管理多模块应用的统一版本号实现,使用versions-maven-plugin插件和占位符结合flatten-maven-plugin插件来实现,感兴趣的可以了解一下
    2024-12-12
  • IDEA提示:Boolean method ‘xxx‘ is always inverted问题

    IDEA提示:Boolean method ‘xxx‘ is always&nb

    这篇文章主要介绍了IDEA提示:Boolean method ‘xxx‘ is always inverted问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • SpringBoot配置lombok与logback过程解析

    SpringBoot配置lombok与logback过程解析

    这篇文章主要介绍了SpringBoot配置lombok与logback过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • MyBatis动态SQL特性详解

    MyBatis动态SQL特性详解

    动态SQL可以省略很多拼接SQL的步骤,使用类似于JSTL方式,下面这篇文章主要给大家介绍了关于Mybatis动态SQL特性的相关资料,文字通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • 使用java.util.Timer实现任务调度

    使用java.util.Timer实现任务调度

    这篇文章主要为大家详细介绍了使用java.util.Timer实现任务调度,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Spring注解开发生命周期原理解析

    Spring注解开发生命周期原理解析

    这篇文章主要介绍了Spring注解开发生命周期原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Java打印九九乘法表代码详情

    Java打印九九乘法表代码详情

    这篇文章主要介绍了Java打印九九乘法表,使用了双重for循环,使用do{}while()实现打印九九乘法表这些好玩的语法实现,感兴趣的小伙伴可参考下面文章内容
    2021-09-09

最新评论