欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java讀取JSON文件并將其中元素轉為JSON對象輸出的方式

 更新時間:2025年10月11日 08:47:57   作者:岫珩  
這篇文章主要介紹了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ù)導入導出等

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java8 日期、時間操作代碼

    Java8 日期、時間操作代碼

    在Java8之前,日期時間API一直被開發(fā)者詬病,包括:java.util.Date是可變類型,SimpleDateFormat非線程安全等問題。故此,Java8引入了一套全新的日期時間處理API,新的API基于ISO標準日歷系統(tǒng)
    2021-09-09
  • IDEA 中使用 ECJ 編譯出現(xiàn) java.lang.IllegalArgumentException的錯誤問題

    IDEA 中使用 ECJ 編譯出現(xiàn) java.lang.IllegalArgumentException的錯誤問題

    這篇文章主要介紹了IDEA 中使用 ECJ 編譯出現(xiàn) java.lang.IllegalArgumentException問題 ,本文內容簡短給大家介紹的好,需要的朋友可以參考下
    2020-05-05
  • IDEA:Error running,Command line is too long.解決方案

    IDEA:Error running,Command line is too&n

    這篇文章主要介紹了IDEA:Error running,Command line is too long.解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 詳解RSA加密算法的原理與Java實現(xiàn)

    詳解RSA加密算法的原理與Java實現(xiàn)

    這篇文章主要和大家分享非對稱加密中的一種算法,那就是 RSA 加密算法。本文介紹了RSA算法的原理與Java實現(xiàn),感興趣的小伙伴可以嘗試一下
    2022-10-10
  • Java Web實現(xiàn)添加定時任務的方法示例

    Java Web實現(xiàn)添加定時任務的方法示例

    這篇文章主要介紹了Java Web實現(xiàn)添加定時任務的方法,涉及java web定時任務控制類定義、調用及監(jiān)聽器定義、添加等相關操作技巧,需要的朋友可以參考下
    2018-01-01
  • 8種常見的Java不規(guī)范代碼

    8種常見的Java不規(guī)范代碼

    本文主要介紹了8種常見的Java不規(guī)范代碼。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • Spring如何使用xml創(chuàng)建bean對象

    Spring如何使用xml創(chuàng)建bean對象

    這篇文章主要介紹了Spring如何使用xml創(chuàng)建bean對象,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Springboot 啟動之后初始化資源的幾種方法

    Springboot 啟動之后初始化資源的幾種方法

    在我們實際工作中,總會遇到這樣需求,在項目啟動的時候需要做一些初始化的操作,比如初始化線程池,提前加載好加密證書等,本文主要介紹了Springboot 啟動之后初始化資源的幾種方法,感興趣的可以了解一下
    2024-01-01
  • 在jmeter的beanshell中用java獲取系統(tǒng)當前時間的簡單實例

    在jmeter的beanshell中用java獲取系統(tǒng)當前時間的簡單實例

    這篇文章介紹了在jmeter的beanshell中用java獲取系統(tǒng)當前時間的簡單實例,有需要的朋友可以參考一下
    2013-09-09
  • Java日常練習題,每天進步一點點(58)

    Java日常練習題,每天進步一點點(58)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08

最新評論