Java读取JSON文件并将其中元素转为JSON对象输出的方式
作者:岫珩
这篇文章主要介绍了Java读取JSON文件并将其中元素转为JSON对象输出的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Java读取JSON文件将元素转JSON对象输出
1. 需求描述
本地有一个json文件,内容为数组,数组中的每个元素都是json对象,即键值形式
如文件test.json
[
{"123":"libai","245":"zhangfei","444":"qipa"},
{"133":"libi","205":"zhanfei","494":"qipai"}
]
现在想要将test.json文件中的每个元素读出来并转为json对象输出
2. 所需依赖
在pom中添加依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
3. 代码
完整代码内容如下
package com.xiucong.vihicle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
/**
* @func:
* @author: LiBai
* @version: v1.0
* @createTime: 2025/4/15 15:14
*/
public class ExcelInsertRecordsController {
public static void main(String[] args) {
// JSON文件路径
String filePath = "D:\\xiucong\\test.json";
File file = new File(filePath);
try {
// 读取文件内容为字符串
String content = new String(Files.readAllBytes(Paths.get(file.getPath())));
// 将字符串解析为JSONArray对象
JSONArray jsonArray = JSON.parseArray(content);
// 打印数组内容,以验证结果
for (int i = 0; i < jsonArray.size(); i++) {
// System.out.println(jsonArray.get(i));
JSONObject obj = (JSONObject) jsonArray.get(i);
System.out.println(i+"==============================================>");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Java读取JSON文件并解析为JSON对象的拓展
以下是一个详细的Java读取JSON文件并转换为JSON对象的实现步骤,涵盖不同场景和常用库(如Jackson、Gson、JSON-java)的使用方法:
1. 准备工作
依赖库选择
Jackson:高性能,Spring Boot默认集成(推荐)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.15.0</version>
</dependency>
Gson:Google的JSON库,轻量级
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
JSON-java:官方JSON库(功能较基础)
// JDK 内置(JDK 11+)
// 或手动引入:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20231013</version>
</dependency>
2. 使用Jackson解析JSON文件
步骤1:读取文件内容
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ReadJsonFile {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
try {
// 从文件路径读取JSON
JsonNode rootNode = mapper.readTree(new File("data.json"));
// 直接输出整个JSON对象
System.out.println(rootNode.toPrettyString());
// 访问具体字段
String name = rootNode.get("name").asText();
int age = rootNode.get("age").asInt();
System.out.println("Name: " + name + ", Age: " + age);
} catch (IOException e) {
e.printStackTrace();
}
}
}
步骤2:反序列化为Java对象
定义Java类:
public class User {
private String name;
private int age;
private List<String> hobbies;
// 必须有无参构造器和getter/setter
// ...
}
解析代码:
User user = mapper.readValue(new File("data.json"), User.class);
System.out.println(user.getHobbies());
3. 使用Gson解析JSON文件
步骤1:读取并解析
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class GsonExample {
public static void main(String[] args) {
Gson gson = new Gson();
try {
// 读取文件内容为字符串
String jsonStr = Files.readString(Paths.get("data.json"));
// 转换为JsonObject
JsonObject jsonObject = JsonParser.parseString(jsonStr).getAsJsonObject();
// 访问字段
String name = jsonObject.get("name").getAsString();
System.out.println("Name: " + name);
// 反序列化为对象
User user = gson.fromJson(jsonStr, User.class);
System.out.println(user.getAge());
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. 使用JSON-java(org.json)解析
import org.json.JSONObject;
import org.json.JSONTokener;
public class JsonOrgExample {
public static void main(String[] args) {
try (FileReader reader = new FileReader("data.json")) {
// 从文件读取JSON
JSONObject jsonObject = new JSONObject(new JSONTokener(reader));
// 访问字段
String name = jsonObject.getString("name");
JSONArray hobbies = jsonObject.getJSONArray("hobbies");
System.out.println("Hobbies: " + hobbies.toString(2)); // 格式化输出
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. 处理复杂JSON结构
示例JSON文件(data.json)
{
"name": "Alice",
"age": 30,
"hobbies": ["Reading", "Hiking"],
"address": {
"city": "Shanghai",
"postcode": "200000"
}
}
访问嵌套对象(Jackson示例)
JsonNode addressNode = rootNode.get("address");
String city = addressNode.get("city").asText();
遍历数组
JsonNode hobbies = rootNode.get("hobbies");
hobbies.forEach(hobby -> System.out.println(hobby.asText()));
6. 异常处理与最佳实践
文件路径问题
- 使用绝对路径或相对路径(相对于项目根目录)
- 文件不存在时捕获
FileNotFoundException
JSON格式校验
- 确保JSON文件语法正确(可用在线工具如JSONLint验证)
性能优化
- 大文件使用Jackson的流式API(
JsonParser)逐行解析 - 复用
ObjectMapper实例(线程安全)
7. 完整代码示例(Jackson版)
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.File;
import java.io.IOException;
public class JsonReader {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
try {
JsonNode root = mapper.readTree(new File("data.json"));
// 输出完整JSON
System.out.println("完整JSON内容:\n" + root.toPrettyString());
// 提取嵌套字段
String city = root.get("address").get("city").asText();
System.out.println("城市: " + city);
// 遍历数组
System.out.println("爱好:");
root.get("hobbies").forEach(hobby ->
System.out.println(" - " + hobby.asText())
);
} catch (IOException e) {
System.err.println("读取文件失败: " + e.getMessage());
}
}
}
总结
- 推荐库:优先选择 Jackson(性能好、功能全)或 Gson(简洁易用)
- 关键步骤:读取文件 → 解析为JSON对象 → 按需提取数据
- 适用场景:配置文件解析、API响应处理、数据导入导出等
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
