知識庫 / JSON RSS 訂閱

JSON 指針概覽

JSON
HongKong
5
09:55 PM · Dec 05 ,2025

1. 概述

在本教程中,我們將演示如何使用 JSON 指針來瀏覽和從 JSON 數據中檢索信息

我們還將演示如何執行諸如插入新數據或更新鍵值對等操作。

2. 依賴設置

首先,我們需要將一些依賴項添加到我們的 <em pom.xml</em> 中:

<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.json</artifactId>
    <version>1.1.2</version>
</dependency>

3. JSON 指針

JSON(“JavaScript 對象表示法”)是一種輕量級的數據交換格式,最初由 Douglas Crockford 指定,用於在系統之間交換數據。

雖然它使用 JavaScript 語法,但由於其結果是純文本,因此它具有語言無關性。

JSON 指針 (RFC 6901) 是 JSON 處理 1.1 API (JSR 374) 中的一項特性。它定義了一個 字符串,可用於訪問 JSON 文檔中的值。它與 XPath 在 XML 文檔中的作用類似。

通過使用 JSON 指針,我們可以從 JSON 文件中檢索數據並修改該文件。

4. 訪問數據

我們將通過實現一個名為 JsonPointerCrud 的類,來演示一些操作示例。

假設我們有一個名為 books.json 的 JSON 文件,其內容如下:

{
    "library": "My Personal Library",
    "books": [
        { "title":"Title 1", "author":"Jane Doe" },
        { "title":"Title 2", "author":"John Doe" }
    ]
}

為了從該文件中訪問數據,我們需要讀取並解析成 JsonStructure 結構。我們可以使用 Json.createReader() 方法來實現,該方法接受一個 InputStreamFileReader

以下是如何執行此操作的方法:

JsonReader reader = Json.createReader(new FileReader("books.json"));
JsonStructure jsonStructure = reader.read();
reader.close();

內容將存儲在 JsonStructure 對象中。這是我們用於執行後續操作的對象。

4.1. 從文件中獲取數據

要獲取單個值,我們創建一個 JsonPointer,它指示我們想要獲取值的哪個標籤:

JsonPointer jsonPointer = Json.createPointer("/library");
JsonString jsonString = (JsonString) jsonPointer.getValue(jsonStructure);
System.out.println(jsonString.getString());

請注意,此字符串的第一個字符是‘/ – 這是一種語法要求

結果如下:

My Personal Library

要從列表中獲取一個值,我們需要指定其索引(其中第一個索引為 0):

JsonPointer jsonPointer = Json.createPointer("/books/1");
JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure);
System.out.println(jsonObject.toString());

此輸出結果為:

"title":"Title 2", "author":"John Doe"

4.2. 檢查鍵是否存在於文件中

通過 containsValue 方法,我們可以檢查用於創建指針的值是否存在於 JSON 文件中:

JsonPointer jsonPointer = Json.createPointer("/library");
boolean found = jsonPointer.containsValue(jsonStructure);
System.out.println(found);

此片段的結果是:

true

4.3. 添加新鍵值對

如果需要向 JSON 添加新值,則 createValue 是負責處理它的方法。 方法 createValue 被重載,以接受 StringintlongdoubleBigDecimalBigInteger

JsonPointer jsonPointer = Json.createPointer("/total");
JsonNumber jsonNumber = Json.createValue(2);
jsonStructure = jsonPointer.add(jsonStructure, jsonNumber);
System.out.println(jsonStructure);

再次,我們的輸出是:

{
    "library": "My Personal Library",
    "total": 2,
    "books": [
        { "title":"Title 1", "author":"Jane Doe" },
        { "title":"Title 2", "author":"John Doe" }
    ]
}

4.4. 更新鍵值對

要更新鍵值對,首先需要創建新的鍵值對。創建鍵值對後,使用通過鍵參數創建的指針上的 replace 方法來替換它:

JsonPointer jsonPointer = Json.createPointer("/total");
JsonNumber jsonNumberNewValue = Json.createValue(5);
jsonStructure = jsonPointer.replace(jsonStructure, jsonNumberNewValue);
System.out.println(jsonStructure);

輸出:

{
    "library": "My Personal Library",
    "total": 5,
    "books": [
        { "title":"Title 1", "author":"Jane Doe" },
        { "title":"Title 2", "author":"John Doe" }
    ]
}

4.5. 刪除鍵

要刪除鍵,我們首先創建一個指向該鍵的指針。然後,我們使用 remove 方法:

JsonPointer jsonPointer = Json.createPointer("/library");
jsonPointer.getValue(jsonStructure);
jsonStructure = jsonPointer.remove(jsonStructure);
System.out.println(jsonStructure);

結果如下:

{
    "total": 5,
    "books": [
        { "title":"Title 1", "author":"Jane Doe" },
        { "title":"Title 2", "author":"John Doe" }
    ]
}

4.6. 顯示文件的完整內容

如果指針使用一個空字符串創建,則會檢索文件的全部內容:

JsonPointer jsonPointer = Json.createPointer("");
JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure);
System.out.println(jsonObject.toString());

這段代碼示例將輸出整個 jsonStructure 的內容。

結論

在本文中,我們介紹瞭如何使用 JSON 指針對 JSON 數據執行各種操作。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.