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

如何在Java中使用org.json和JSON-B解析與編寫JSON

 更新時間:2025年06月10日 10:13:46   作者:面朝大海,春不暖,花不開  
JSON-Java是用于在Java中讀取和寫入JSON文檔的參考應(yīng)用程序,這篇文章主要介紹了如何在Java中使用org.json和JSON-B解析與編寫JSON的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

JSON(JavaScript Object Notation)因其輕量、語言無關(guān)且易于讀寫的特性,已成為現(xiàn)代 Web 應(yīng)用中數(shù)據(jù)交換的標準格式。在 Java 中,處理 JSON 的庫眾多,其中 org.json 和 JSON-B 是兩種流行的選擇。本文將深入探討這兩種庫的特點、使用示例、優(yōu)缺點以及適用場景,幫助開發(fā)者根據(jù)項目需求選擇合適的工具。

1. JSON 在 Java 中的重要性

JSON 是一種基于文本的數(shù)據(jù)格式,源自 JavaScript 編程語言(ECMA-262 第 3 版)。它支持兩種主要結(jié)構(gòu):

  • 對象:鍵值對集合,通常用大括號 {} 表示。
  • 數(shù)組:有序值列表,用方括號 [] 表示。

JSON 的簡單性和跨語言兼容性使其成為 API 數(shù)據(jù)傳輸和配置文件存儲的理想選擇。在 Java 中,處理 JSON 需要專門的庫來解析 JSON 字符串并將其轉(zhuǎn)換為 Java 對象,或?qū)?Java 對象序列化為 JSON 字符串。本文將重點介紹 org.json 和 JSON-B 兩種庫。

2. org.json 概述

org.json(也稱為 JSON-Java)是一個輕量級的 Java 庫,廣泛用于 JSON 數(shù)據(jù)的解析和生成。它在 Android 開發(fā)中尤為流行,因為它是 Android 平臺的默認 JSON 庫。該庫提供核心類如 JSONObject 和 JSONArray,用于處理 JSON 對象和數(shù)組。

2.1 org.json 的特點

  • 簡單 API:易于上手,適合基本的 JSON 操作。
  • 解析功能:支持從字符串、輸入流或讀取器解析 JSON。
  • 序列化:允許從 Java 數(shù)據(jù)創(chuàng)建 JSON 對象和數(shù)組。
  • 格式轉(zhuǎn)換:支持 JSON 與 XML、HTTP 頭、Cookie 等格式的轉(zhuǎn)換。
  • 無依賴:無需外部庫,適合輕量級項目。

2.2 使用示例

以下是使用 org.json 解析和編寫 JSON 的示例代碼。

解析 JSON

以下代碼展示如何從 JSON 文件中讀取數(shù)據(jù)并提取特定字段:

public class SoftwareParseOrgJson {
    final static String FILE_NAME = "/json/softwareinfo.json";

    public static void main(String[] args) throws Exception {
        InputStream jsonInput = SoftwareParseOrgJson.class.getResourceAsStream(FILE_NAME);
        if (jsonInput == null) {
            throw new NullPointerException("can't find" + FILE_NAME);
        }
        JSONObject obj = new JSONObject(new JSONTokener(jsonInput));
        System.out.println("Software Name: " + obj.getString("name"));
        System.out.println("Version: " + obj.getString("version"));
        System.out.println("Description: " + obj.getString("description"));
        System.out.println("Class: " + obj.getString("className"));
        JSONArray contribs = obj.getJSONArray("contributors");
        for (int i = 0; i < contribs.length(); i++) {
            System.out.println("Contributor Name: " + contribs.get(i));
        }
    }
}

輸出

Software Name: robinparse
Version: 1.2.3
Description: Another Parser for JSON
Class: RobinParse
Contributor Name: Robin Smythe
Contributor Name: Jon Jenz
Contributor Name: Jan Ardann

此代碼通過 JSONTokener 從輸入流創(chuàng)建 JSONObject,然后使用 getString 和 getJSONArray 方法提取字段。注意,JSONArray 不支持 Iterable,因此需要使用傳統(tǒng) for 循環(huán)遍歷。

編寫 JSON

以下代碼展示如何創(chuàng)建 JSON 對象并將其轉(zhuǎn)換為字符串:

.ConcurrentHashMap

public class WriteOrgJson {
    public static void main(String[] args) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("Name", "robinParse")
                  .put("Version", "1.2.3")
                  .put("Class", "RobinParse");
        String printable = jsonObject.toString();
        System.out.println(printable);
    }
}

輸出

{"Name":"robinParse","Class":"RobinParse","Version":"1.2.3"}

此代碼利用 JSONObject 的流式 API(支持方法鏈式調(diào)用)添加鍵值對,并通過 toString 方法生成格式化的 JSON 字符串。

2.3 org.json 的優(yōu)缺點

優(yōu)點缺點
API 簡單,易于快速上手功能較少,缺乏高級映射支持
無外部依賴,輕量級不如 Jackson 等庫強大
廣泛用于 Android 開發(fā)定制化能力有限

3. JSON-B 概述

JSON-B(JSON Binding)是 Java API for JSON Binding(JSR-367),是 Jakarta EE 平臺的一部分。它旨在通過自動映射簡化 Java 對象與 JSON 數(shù)據(jù)之間的轉(zhuǎn)換。JSON-B 的參考實現(xiàn)是 Yasson,它還被納入 Eclipse MicroProfile 項目。

3.1 JSON-B 的特點

  • 標準 API:確??鐚崿F(xiàn)的可移植性。
  • 自動映射:無需手動解析,支持 Java 對象與 JSON 的雙向轉(zhuǎn)換。
  • 定制化:通過注解支持靈活的映射配置。
  • 企業(yè)級支持:集成于 Jakarta EE,適合復(fù)雜應(yīng)用。
  • 易用性:方法命名直觀,減少開發(fā)工作量。

3.2 使用示例

以下是使用 JSON-B 讀取和編寫 JSON 的示例代碼。

讀取和編寫 JSON

以下代碼展示如何將 JSON 字符串轉(zhuǎn)換為 Java 對象并反向序列化:

public class ReadWriteJsonB {
    public static void main(String[] args) throws IOException {
        Jsonb jsonb = JsonbBuilder.create();
        // 讀取
        String jsonInput = "{\"id\":0,\"firstName\":\"Robin\",\"lastName\":\"Williams\"}";
        Person rw = jsonb.fromJson(jsonInput, Person.class);
        System.out.println(rw);
        // 編寫
        String result = jsonb.toJson(rw);
        System.out.println(result);
    }
}

輸出(假設(shè) Person 類有適當?shù)?nbsp;toString 方法):

Person{id=0, firstName=Robin, lastName=Williams}
{"firstName":"Robin","id":0,"lastName":"Williams"}

此代碼通過 JsonbBuilder 創(chuàng)建 Jsonb 實例,使用 fromJson 將 JSON 字符串轉(zhuǎn)換為 Person 對象,再通過 toJson 將對象轉(zhuǎn)換回 JSON 字符串。默認情況下,Person 類無需注解即可工作。

定制化示例

JSON-B 支持通過注解定制映射。例如,排除冗余字段:

public class Person {
    private int id;
    private String firstName;
    private String lastName;

    @JsonbTransient
    public String getFullName() {
        return firstName + " " + lastName;
    }
    //  getter 和 setter...
}

運行上述代碼后,輸出將不包含 fullName 字段:

{"firstName":"Robin","id":0,"lastName":"Williams"}

通過 @JsonbTransient 注解,getFullName 方法的返回值被排除在 JSON 輸出之外,從而減少數(shù)據(jù)冗余。

3.3 JSON-B 的優(yōu)缺點

優(yōu)點缺點
標準 API,跨平臺一致性需要 Jakarta EE 環(huán)境
自動映射,開發(fā)效率高對于簡單任務(wù)可能過于復(fù)雜
支持高級定制化依賴外部庫

4. org.json 與 JSON-B 的比較

以下是對 org.json 和 JSON-B 的詳細比較:

特性org.jsonJSON-B
標準化非標準,但廣泛使用標準 API(JSR-367)
易用性適合簡單操作自動映射,開發(fā)更高效
定制化有限通過注解支持廣泛定制
性能適合中小型數(shù)據(jù)優(yōu)化用于大型數(shù)據(jù)集
依賴無需外部依賴需要 Jakarta EE 或類似環(huán)境
適用場景通用 JSON 解析/編寫Java 對象與 JSON 綁定

5. 適用場景

  • 使用 org.json 的場景

    • 需要輕量級、無依賴的 JSON 處理庫。
    • 在 Android 項目中進行簡單 JSON 操作。
    • 項目對高級功能需求較低。
  • 使用 JSON-B 的場景

    • 在 Jakarta EE 或 MicroProfile 環(huán)境中開發(fā)企業(yè)級應(yīng)用。
    • 需要標準化的 JSON 綁定 API。
    • 項目要求復(fù)雜的對象映射和定制化。

6. 結(jié)論

org.json 和 JSON-B 都是 Java 中處理 JSON 的強大工具,各自適用于不同場景。org.json 因其簡單性和無依賴特性,適合輕量級項目和 Android 開發(fā);而 JSON-B 作為標準 API,提供自動映射和高級定制功能,適合企業(yè)級應(yīng)用。開發(fā)者應(yīng)根據(jù)項目需求(如環(huán)境、復(fù)雜性和標準化要求)選擇合適的庫。

通過理解這兩種庫的優(yōu)缺點,您可以為您的 Java 項目選擇最佳的 JSON 處理方案。

關(guān)鍵引用

到此這篇關(guān)于如何在Java中使用org.json和JSON-B解析與編寫JSON的文章就介紹到這了,更多相關(guān)org.json和JSON-B解析JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java對接阿里云短信服務(wù)保姆級教程(新手秒會)

    Java對接阿里云短信服務(wù)保姆級教程(新手秒會)

    這篇文章主要介紹了如何在阿里云上申請短信服務(wù)以及如何使用Java代碼進行對接,包括申請資質(zhì)、簽名和模板,以及編寫Java代碼整合成工具類進行調(diào)用的步驟,需要的朋友可以參考下
    2024-12-12
  • SpringBoot Redis實現(xiàn)接口冪等性校驗方法詳細講解

    SpringBoot Redis實現(xiàn)接口冪等性校驗方法詳細講解

    這篇文章主要介紹了SpringBoot Redis實現(xiàn)接口冪等性校驗方法,近期一個老項目出現(xiàn)了接口冪等性校驗問題,前端加了按鈕置灰,依然被人拉著接口參數(shù)一頓輸出,還是重復(fù)調(diào)用了接口,通過復(fù)制粘貼,完成了后端接口冪等性調(diào)用校驗
    2022-11-11
  • SpringBoot使用Log4j過程詳解

    SpringBoot使用Log4j過程詳解

    這篇文章主要介紹了SpringBoot使用Log4j過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot程序打包失敗(.jar中沒有主清單屬性)

    SpringBoot程序打包失敗(.jar中沒有主清單屬性)

    在學(xué)習SpringBoot,打包SpringBoot程序后,在cmd運行出現(xiàn)了 某某某.jar中沒有注清單屬性,本文就來介紹一下原因以及解決方法,感興趣的可以了解一下
    2023-06-06
  • 面試題:Java 實現(xiàn)查找旋轉(zhuǎn)數(shù)組的最小數(shù)字

    面試題:Java 實現(xiàn)查找旋轉(zhuǎn)數(shù)組的最小數(shù)字

    這篇文章主要介紹了Java 實現(xiàn)查找旋轉(zhuǎn)數(shù)組的最小數(shù)字,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java多線程之synchronized關(guān)鍵字的使用

    Java多線程之synchronized關(guān)鍵字的使用

    這篇文章主要介紹了Java多線程之synchronized關(guān)鍵字的使用,文中有非常詳細的代碼示例,對正在學(xué)習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • springboot validator枚舉值校驗功能實現(xiàn)

    springboot validator枚舉值校驗功能實現(xiàn)

    這篇文章主要介紹了springboot validator枚舉值校驗功能實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2020-01-01
  • 淺析idea 添加項目依賴的兩種方式

    淺析idea 添加項目依賴的兩種方式

    這篇文章主要介紹了idea 添加項目依賴的兩種方式,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • MybatisPlus之時間處理問題

    MybatisPlus之時間處理問題

    在數(shù)據(jù)庫設(shè)計時,阿里巴巴編碼規(guī)約建議使用gmt_create和gmt_modified命名時間字段,并設(shè)置為datetime類型,本文介紹了兩種自動填充時間字段的實現(xiàn)方式:SQL級別和代碼級別(使用MyBatis?Plus),SQL級別通過設(shè)置默認值和更新值為CURRENT_TIMESTAMP
    2024-09-09
  • 十分鐘理解Java中的動態(tài)代理

    十分鐘理解Java中的動態(tài)代理

    十分鐘幫助大家理解Java中的動態(tài)代理,什么是動態(tài)代理?感興趣的小伙伴們可以參考一下
    2016-06-06

最新評論