Java如何读取JSON文件?
- 后端开发
- 2025-06-27
- 6
在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性能指南。
