上一篇                     
               
			  Java如何读取JSON文件?
- 后端开发
- 2025-06-27
- 5029
 在Java中读取JSON文件通常使用第三方库如Jackson或Gson,通过ObjectMapper(Jackson)或JsonParser(Gson)解析文件内容,可转换为Java对象或树形结构,需先添加依赖,再通过文件流读取并处理数据。
 
在Java开发中,读取JSON文件是常见需求,例如处理配置文件、API响应或数据交换,以下是三种主流库的详细实现方案,根据项目需求选择合适工具:
常用JSON处理库对比
| 库名称 | 优点 | 缺点 | 适用场景 | 
|---|---|---|---|
| org.json | 轻量级、无需额外依赖 | 功能简单、不支持复杂数据类型 | 小型项目、快速解析简单JSON | 
| Gson | 谷歌出品、API简洁、支持泛型 | 大数据量时性能中等 | Android、常规业务逻辑 | 
| Jackson | 性能最优、流式API、完整注解支持 | 学习曲线稍陡 | 高并发系统、复杂数据结构处理 | 
具体实现步骤与代码
使用 org.json(原生轻量)
import org.json.JSONObject;
import org.json.JSONTokener;
import java.io.FileReader;
public class OrgJsonExample {
    public static void main(String[] args) {
        try (FileReader reader = new FileReader("data.json")) {
            JSONTokener tokener = new JSONTokener(reader);
            JSONObject json = new JSONObject(tokener);
            // 提取数据示例
            String name = json.getString("name");
            int age = json.getInt("age");
            System.out.println("Name: " + name + ", Age: " + age);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} 
关键点:
- JSONTokener直接解析文件流
- 通过 getString()、getInt()等方法按字段名取值
- 需添加依赖:implementation 'org.json:json:20251013'
使用 Gson(简洁易用)
import com.google.gson.Gson;
import java.io.FileReader;
// 定义与JSON结构匹配的Java类
class User {
    String name;
    int age;
    // Gson自动映射字段(需与JSON键名一致)
}
public class GsonExample {
    public static void main(String[] args) {
        Gson gson = new Gson();
        try (FileReader reader = new FileReader("data.json")) {
            User user = gson.fromJson(reader, User.class); // 自动绑定到对象
            System.out.println("Name: " + user.name + ", Age: " + user.age);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} 
优势:

- 自动将JSON映射到Java对象(反序列化)
- 支持复杂嵌套结构(如List、Map)
- 依赖:implementation 'com.google.code.gson:gson:2.10.1'
使用 Jackson(高性能首选)
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
public class JacksonExample {
    public static void main(String[] args) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            User user = mapper.readValue(new File("data.json"), User.class);
            System.out.println("Name: " + user.name + ", Age: " + user.age);
            // 流式API处理大文件(示例)
            /*
            JsonFactory factory = new JsonFactory();
            JsonParser parser = factory.createParser(new File("large.json"));
            while (parser.nextToken() != null) { ... } // 逐令牌解析
            */
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} 
进阶特性:
- 注解控制映射:@JsonProperty("json_key")自定义字段名
- 流式API(JsonParser)处理GB级文件不占用全内存
- 依赖:implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.0'
异常处理与最佳实践
-  常见异常:  - FileNotFoundException:文件路径错误
- JsonSyntaxException(Gson)/- JsonParseException(Jackson):JSON格式错误
- UnrecognizedPropertyException:JSON字段与Java类不匹配
 
-  防御性代码建议: try { // 解析操作 } catch (IOException e) { System.err.println("文件读取失败: " + e.getMessage()); } catch (JsonProcessingException e) { System.err.println("JSON解析错误: " + e.getOriginalMessage()); }
-  性能优化:  - 大文件优先用Jackson流式API
- 频繁操作时复用 ObjectMapper/Gson实例(线程安全)
 
总结选择建议
- 小型工具开发 → org.json(轻量无依赖)
- Android或常规业务 → Gson(API简洁)
- 高并发服务/复杂JSON → Jackson(性能+灵活性)
引用说明:本文代码基于官方文档最佳实践,Gson设计参考Google官方GitHub,Jackson优化方案来自FasterXML性能指南。
 
  
			