最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java讀取JSON文件并將其中元素轉(zhuǎn)為JSON對(duì)象輸出的方式

 更新時(shí)間:2025年10月11日 08:47:57   作者:岫珩  
這篇文章主要介紹了Java讀取JSON文件并將其中元素轉(zhuǎn)為JSON對(duì)象輸出的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java讀取JSON文件將元素轉(zhuǎn)JSON對(duì)象輸出

1. 需求描述

本地有一個(gè)json文件,內(nèi)容為數(shù)組,數(shù)組中的每個(gè)元素都是json對(duì)象,即鍵值形式

如文件test.json

[
	{"123":"libai","245":"zhangfei","444":"qipa"},
	{"133":"libi","205":"zhanfei","494":"qipai"}
]

現(xiàn)在想要將test.json文件中的每個(gè)元素讀出來(lái)并轉(zhuǎn)為json對(duì)象輸出

2. 所需依賴(lài)

在pom中添加依賴(lài)

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.83</version>
        </dependency>

3. 代碼

完整代碼內(nèi)容如下

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 {
            // 讀取文件內(nèi)容為字符串
            String content = new String(Files.readAllBytes(Paths.get(file.getPath())));

            // 將字符串解析為JSONArray對(duì)象
            JSONArray jsonArray = JSON.parseArray(content);

            // 打印數(shù)組內(nèi)容,以驗(yàn)證結(jié)果
            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對(duì)象的拓展

以下是一個(gè)詳細(xì)的Java讀取JSON文件并轉(zhuǎn)換為JSON對(duì)象的實(shí)現(xiàn)步驟,涵蓋不同場(chǎng)景和常用庫(kù)(如Jackson、Gson、JSON-java)的使用方法:

1. 準(zhǔn)備工作

依賴(lài)庫(kù)選擇

Jackson:高性能,Spring Boot默認(rèn)集成(推薦)

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>

Gson:Google的JSON庫(kù),輕量級(jí)

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

JSON-java:官方JSON庫(kù)(功能較基礎(chǔ))

// JDK 內(nèi)置(JDK 11+)
// 或手動(dòng)引入:
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>

2. 使用Jackson解析JSON文件

步驟1:讀取文件內(nèi)容

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"));
            
            // 直接輸出整個(gè)JSON對(duì)象
            System.out.println(rootNode.toPrettyString());

            // 訪(fǎng)問(wèn)具體字段
            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對(duì)象

定義Java類(lèi):

public class User {
    private String name;
    private int age;
    private List<String> hobbies;
    
    // 必須有無(wú)參構(gòu)造器和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 {
            // 讀取文件內(nèi)容為字符串
            String jsonStr = Files.readString(Paths.get("data.json"));
            
            // 轉(zhuǎn)換為JsonObject
            JsonObject jsonObject = JsonParser.parseString(jsonStr).getAsJsonObject();
            
            // 訪(fǎng)問(wèn)字段
            String name = jsonObject.get("name").getAsString();
            System.out.println("Name: " + name);

            // 反序列化為對(duì)象
            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));
            
            // 訪(fǎng)問(wèn)字段
            String name = jsonObject.getString("name");
            JSONArray hobbies = jsonObject.getJSONArray("hobbies");
            
            System.out.println("Hobbies: " + hobbies.toString(2)); // 格式化輸出

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5. 處理復(fù)雜JSON結(jié)構(gòu)

示例JSON文件(data.json)

{
  "name": "Alice",
  "age": 30,
  "hobbies": ["Reading", "Hiking"],
  "address": {
    "city": "Shanghai",
    "postcode": "200000"
  }
}

訪(fǎng)問(wèn)嵌套對(duì)象(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. 異常處理與最佳實(shí)踐

文件路徑問(wèn)題

  • 使用絕對(duì)路徑或相對(duì)路徑(相對(duì)于項(xiàng)目根目錄)
  • 文件不存在時(shí)捕獲 FileNotFoundException

JSON格式校驗(yàn)

  • 確保JSON文件語(yǔ)法正確(可用在線(xiàn)工具如JSONLint驗(yàn)證)

性能優(yōu)化

  • 大文件使用Jackson的流式API(JsonParser)逐行解析
  • 復(fù)用 ObjectMapper 實(shí)例(線(xiàn)程安全)

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èi)容:\n" + root.toPrettyString());
            
            // 提取嵌套字段
            String city = root.get("address").get("city").asText();
            System.out.println("城市: " + city);
            
            // 遍歷數(shù)組
            System.out.println("愛(ài)好:");
            root.get("hobbies").forEach(hobby -> 
                System.out.println(" - " + hobby.asText())
            );

        } catch (IOException e) {
            System.err.println("讀取文件失敗: " + e.getMessage());
        }
    }
}

總結(jié)

  • 推薦庫(kù):優(yōu)先選擇 Jackson(性能好、功能全)或 Gson(簡(jiǎn)潔易用)
  • 關(guān)鍵步驟:讀取文件 → 解析為JSON對(duì)象 → 按需提取數(shù)據(jù)
  • 適用場(chǎng)景:配置文件解析、API響應(yīng)處理、數(shù)據(jù)導(dǎo)入導(dǎo)出等

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)異步消息處理的代碼示例

    SpringBoot實(shí)現(xiàn)異步消息處理的代碼示例

    在現(xiàn)代應(yīng)用程序中,異步消息處理是一項(xiàng)至關(guān)重要的任務(wù)。它可以提高應(yīng)用程序的性能、可伸縮性和可靠性,同時(shí)也可以提供更好的用戶(hù)體驗(yàn),本文將介紹如何使用Spring Boot實(shí)現(xiàn)異步消息處理,并提供相應(yīng)的代碼示例
    2023-06-06
  • 如何理解SpringMVC

    如何理解SpringMVC

    Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)動(dòng)類(lèi)型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將web層進(jìn)行職責(zé)解耦,基于請(qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā)
    2021-06-06
  • 一文帶你深入認(rèn)識(shí)JAVA中的異常

    一文帶你深入認(rèn)識(shí)JAVA中的異常

    Java異常處理成為社區(qū)中討論最多的話(huà)題之一,下面這篇文章主要給大家介紹了關(guān)于JAVA中異常的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-06-06
  • Mybatis防止sql注入的實(shí)例

    Mybatis防止sql注入的實(shí)例

    本文通過(guò)實(shí)例給大家介紹了Mybatis防止sql注入的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-06-06
  • 使用springmvc運(yùn)行流程分析,手寫(xiě)spring框架?chē)L試

    使用springmvc運(yùn)行流程分析,手寫(xiě)spring框架?chē)L試

    這篇文章主要介紹了使用springmvc運(yùn)行流程分析,手寫(xiě)spring框架?chē)L試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫(kù)

    IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫(kù)

    這篇文章介紹了IDEA使用JDBC安裝配置jar包連接MySQL數(shù)據(jù)庫(kù)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • java實(shí)現(xiàn)微信掃碼登錄第三方網(wǎng)站功能(原理和代碼)

    java實(shí)現(xiàn)微信掃碼登錄第三方網(wǎng)站功能(原理和代碼)

    為避免繁瑣的注冊(cè)登陸,很多平臺(tái)和網(wǎng)站都會(huì)實(shí)現(xiàn)三方登陸的功能,增強(qiáng)用戶(hù)的粘性。這篇文章主要介紹了java實(shí)現(xiàn)微信掃碼登錄第三方網(wǎng)站功能(原理和代碼),避免做微信登錄開(kāi)發(fā)的朋友們少走彎路
    2022-12-12
  • 淺談java實(shí)現(xiàn)重載的方法

    淺談java實(shí)現(xiàn)重載的方法

    方法重載是讓類(lèi)以統(tǒng)一的方式處理不同類(lèi)型數(shù)據(jù)的一種手段。多個(gè)同名函數(shù)同時(shí)存在,具有不同的參數(shù)個(gè)數(shù)/類(lèi)型。重載Overloading是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。Java的方法重載,就是在類(lèi)中可以創(chuàng)建多個(gè)方法,它們具有相同的名字,但具有不同的參數(shù)和不同的定義。
    2015-09-09
  • Java中Maven Shade插件的具體使用

    Java中Maven Shade插件的具體使用

    Maven Shade插件它可以幫助你在構(gòu)建項(xiàng)目時(shí)打包所有依賴(lài)項(xiàng),并將其打包到一個(gè)單獨(dú)的JAR文件中,本文就介紹一下Maven Shade插件的具體使用,具有一定參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • 解決nacos啟動(dòng)報(bào)錯(cuò)Server check fail, please check server localhost ,port 9848 is available的問(wèn)題

    解決nacos啟動(dòng)報(bào)錯(cuò)Server check fail, please che

    這篇文章主要介紹了nacos啟動(dòng) Server check fail, please check server localhost ,port 9848 is available的錯(cuò)誤原因以及解決方法,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

青田县| 象山县| 鹰潭市| 西充县| 元江| 武功县| 石渠县| 恩施市| 调兵山市| 方山县| 安泽县| 高唐县| 鹤庆县| 安陆市| 昌宁县| 汾西县| 河西区| 京山县| 信丰县| 乌拉特前旗| 金秀| 罗山县| 若尔盖县| 开江县| 普兰县| 宁南县| 天水市| 伊吾县| 灌阳县| 渑池县| 鞍山市| 广宗县| 衡阳市| 青阳县| 苍南县| 阳春市| 怀远县| 江门市| 赣榆县| 永寿县| 页游|