面试官:如何在 Java 中读取和解析 JSON 文件

JSON基础概念

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

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

​基本语法规范​

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

Java 中处理 JSON 方案

主流实现方式分为三类:

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

json-simple 库实战

​步骤1:添加依赖​

java 复制代码
<!-- Maven配置 -->
<dependency>
    <groupId>com.googlecode.json-simple</groupId>
    <artifactId>json-simple</artifactId>
    <version>1.1.1</version>
</dependency>

​步骤2:创建 JSON 对象​

java 复制代码
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文件​

java 复制代码
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. 处理复杂嵌套结构​

java 复制代码
// 假设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. 类型安全访问​

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

​3. 文件写入操作​

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

技术选型对比

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

最佳实践建议

  1. ​性能敏感场景​:优先使用Jackson(基准测试显示其解析速度比Gson快30%)
  2. ​微服务架构​ :结合Spring Boot的@RequestBody自动绑定功能
  3. ​数据校验​:使用Hibernate Validator实现Bean Validation
  4. ​异常处理​ :统一捕获ParseException并返回标准错误码
java 复制代码
// 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 和微服务架构奠定坚实基础。建议根据项目需求选择合适的解析方案,并注重异常处理和性能优化。

相关推荐
程序猿阿越34 分钟前
Kafka源码(一)Controller选举与创建Topic
java·后端·源码
程序员爱钓鱼34 分钟前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
Jiude1 小时前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
仰望星空@脚踏实地1 小时前
Spring Boot Web 服务单元测试设计指南
spring boot·后端·单元测试
羊小猪~~1 小时前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
用户8324951417321 小时前
JAVA 版本多版本切换 - 傻瓜式操作工具
后端
estarlee1 小时前
随机昵称网名API接口教程:轻松获取百万创意昵称库
后端
明天好,会的1 小时前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
追逐时光者2 小时前
C#/.NET/.NET Core优秀项目和框架2025年6月简报
后端·.net
llwszx3 小时前
Spring中DelayQueue深度解析:从原理到实战(附结构图解析)
java·后端·spring·delayqueue·延迟任务