Java讀取JSON文件并將其中元素轉為JSON對象輸出的方式
Java讀取JSON文件將元素轉JSON對象輸出
1. 需求描述
本地有一個json文件,內容為數(shù)組,數(shù)組中的每個元素都是json對象,即鍵值形式
如文件test.json
[
{"123":"libai","245":"zhangfei","444":"qipa"},
{"133":"libi","205":"zhanfei","494":"qipai"}
]
現(xiàn)在想要將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);
// 打印數(shù)組內容,以驗證結果
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對象的實現(xiàn)步驟,涵蓋不同場景和常用庫(如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();
遍歷數(shù)組
JsonNode hobbies = rootNode.get("hobbies");
hobbies.forEach(hobby -> System.out.println(hobby.asText()));
6. 異常處理與最佳實踐
文件路徑問題
- 使用絕對路徑或相對路徑(相對于項目根目錄)
- 文件不存在時捕獲
FileNotFoundException
JSON格式校驗
- 確保JSON文件語法正確(可用在線工具如JSONLint驗證)
性能優(yōu)化
- 大文件使用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);
// 遍歷數(shù)組
System.out.println("愛好:");
root.get("hobbies").forEach(hobby ->
System.out.println(" - " + hobby.asText())
);
} catch (IOException e) {
System.err.println("讀取文件失敗: " + e.getMessage());
}
}
}
總結
- 推薦庫:優(yōu)先選擇 Jackson(性能好、功能全)或 Gson(簡潔易用)
- 關鍵步驟:讀取文件 → 解析為JSON對象 → 按需提取數(shù)據(jù)
- 適用場景:配置文件解析、API響應處理、數(shù)據(jù)導入導出等
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
IDEA 中使用 ECJ 編譯出現(xiàn) java.lang.IllegalArgumentException的錯誤問題
這篇文章主要介紹了IDEA 中使用 ECJ 編譯出現(xiàn) java.lang.IllegalArgumentException問題 ,本文內容簡短給大家介紹的好,需要的朋友可以參考下2020-05-05
IDEA:Error running,Command line is too&n
這篇文章主要介紹了IDEA:Error running,Command line is too long.解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
在jmeter的beanshell中用java獲取系統(tǒng)當前時間的簡單實例
這篇文章介紹了在jmeter的beanshell中用java獲取系統(tǒng)當前時間的簡單實例,有需要的朋友可以參考一下2013-09-09

