在Java中读取JSON文件内容,可通过多种库实现,以下是两种主流方法(使用org.json
和Google Gson
),包含详细步骤和代码示例:
准备工作:添加依赖
org.json库(官方轻量级库)
Maven:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20251013</version> </dependency>
Gradle:
implementation 'org.json:json:20251013'
Google Gson库(推荐,支持对象映射)
Maven:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>
Gradle:
implementation 'com.google.code.gson:gson:2.10.1'
方法1:使用org.json库
步骤:
- 读取JSON文件为字符串
- 将字符串解析为
JSONObject
或JSONArray
- 提取数据
示例代码:
import org.json.JSONArray; import org.json.JSONObject; import java.nio.file.Files; import java.nio.file.Paths; public class ReadJsonOrgJson { public static void main(String[] args) { try { // 1. 读取文件内容到字符串 String content = new String(Files.readAllBytes(Paths.get("data.json"))); // 2. 解析JSON(根据根结构选择JSONObject或JSONArray) JSONObject root = new JSONObject(content); // 根为{} // JSONArray root = new JSONArray(content); // 根为[] // 3. 提取数据(示例:获取name字段) String name = root.getString("name"); System.out.println("Name: " + name); // 4. 遍历数组(示例:hobbies数组) JSONArray hobbies = root.getJSONArray("hobbies"); for (int i = 0; i < hobbies.length(); i++) { System.out.println("Hobby: " + hobbies.getString(i)); } } catch (Exception e) { e.printStackTrace(); } } }
适用场景:简单JSON结构、无需对象映射。
方法2:使用Google Gson库
步骤:
- 创建
Gson
实例 - 通过
JsonReader
解析文件流(推荐避免内存溢出) - 直接映射到Java对象(可选)
示例代码(流式解析):
import com.google.gson.stream.JsonReader; import java.io.FileReader; public class ReadJsonGson { public static void main(String[] args) { try (JsonReader reader = new JsonReader(new FileReader("data.json"))) { reader.beginObject(); // 根为{},如果是数组用beginArray() while (reader.hasNext()) { String key = reader.nextName(); if (key.equals("name")) { String name = reader.nextString(); System.out.println("Name: " + name); } else if (key.equals("age")) { int age = reader.nextInt(); System.out.println("Age: " + age); } else { reader.skipValue(); // 跳过未知字段 } } reader.endObject(); } catch (Exception e) { e.printStackTrace(); } } }
示例代码(对象映射):
import com.google.gson.Gson; import java.nio.file.Files; import java.nio.file.Paths; // 定义Java类匹配JSON结构 class User { String name; int age; String[] hobbies; } public class ReadJsonGsonObject { public static void main(String[] args) { try { String json = new String(Files.readAllBytes(Paths.get("data.json"))); Gson gson = new Gson(); User user = gson.fromJson(json, User.class); // 自动映射字段 System.out.println("Name: " + user.name); for (String hobby : user.hobbies) { System.out.println("Hobby: " + hobby); } } catch (Exception e) { e.printStackTrace(); } } }
优势:
- 流式解析节省内存(大文件推荐)
- 对象映射减少手动解析代码
常见问题解决
- 文件路径错误:
- 使用绝对路径(如
C:/data.json
)或正确相对路径(项目根目录起始)。
- 使用绝对路径(如
- JSON格式错误:
- 验证JSON合法性(JSONLint)。
- 特殊字符编码:
- 指定编码:
new String(Files.readAllBytes(path), StandardCharsets.UTF_8)
。
- 指定编码:
- 内存不足:
- 大文件用
Gson
的JsonReader
流式解析。
- 大文件用
总结建议
- 轻量级需求:选
org.json
,无需复杂配置。 - 复杂JSON或对象映射:选
Gson
,支持流式处理和自动转换。 - 最佳实践:
- 始终用
try-catch
处理IOException
和JSONException
。 - 大文件优先使用流式解析(
JsonReader
)。 - 字段匹配严格时,用
@SerializedName
注解(Gson支持)。
- 始终用
引用说明:
- org.json官方文档:GitHub – stleary/JSON-java
- Google Gson文档:Gson User Guide
- Java NIO文件API:Oracle Java Files
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/40204.html