面试官:如何在 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 和微服务架构奠定坚实基础。建议根据项目需求选择合适的解析方案,并注重异常处理和性能优化。

相关推荐
uzong2 小时前
技术故障复盘模版
后端
GetcharZp2 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程3 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研3 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
阿华的代码王国4 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy4 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack5 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9655 小时前
pip install 已经不再安全
后端
寻月隐君6 小时前
硬核实战:从零到一,用 Rust 和 Axum 构建高性能聊天服务后端
后端·rust·github