在 Java 中處理 JSON 陣列
JSON 是開發人員和組織中流行且廣泛使用的資料交換格式。術語 JSON 代表 JavaScript 物件表示法。
它是一個輕量級、可讀性和基於文字的框架,專門設計用於促進以人類可讀格式進行資料交換。JSON 是一種開放的標準格式,這意味著它可以在沒有特殊要求的任何地方使用。
此外,大多數程式語言都支援 JSON。如果你曾經是需要資料交換的專案開發人員,你可能會遇到過 JSON。
例如,我們經常使用 JSON 物件將資料從伺服器傳輸到移動應用程式,反之亦然。本文將瞭解 JSON 基礎知識,例如 JSON 的結構、資料型別、JSON 物件、JSON 陣列等。
我們還將瞭解如何在 Java 中使用 JSON。最後,本文提供了一個在 Java 中處理 JSON 的示例程式碼。
在 Java 中處理 JSON 陣列
JSON 是一個非常靈活和輕量級的資訊共享框架,我們使用物件和資料型別來建立和共享資訊。
在 JSON 中,資料表示為鍵值對,其中鍵具體是一個字串,而值可以是 JSON 支援的任何資料型別。
JSON 支援以下資料型別。
- 字串
- 數字
- 布林型
- 空值
除了這些基本的 JSON 資料型別,我們還可以使用 JSON Arrays 和 JSON Objects 作為鍵值對中的值。
此外,在本文中,我們將更多地研究陣列和物件。但在此之前,我們先來看看 JSON 的特點。
JSON 的一些突出特性如下。
- JSON 非常簡單。你不必付出任何額外的努力來理解和使用 JSON。
- JSON 易於理解和自我描述。通過檢視 JSON 物件,你可以輕鬆理解它要傳達的內容。
- JSON 與語言無關。這個特性已被證明是 JSON 被廣泛接受的一個主要因素。在庫和簡單程式碼的幫助下,我們可以使用幾乎所有語言的 JSON。
- JSON 比 XML 快。這是廣泛使用它的另一個原因。
Java 中的 JSON 物件和 JSON 陣列
在我們學習在 Java 中使用 JSON 物件和陣列之前,我們應該瞭解 JSON 物件和 JSON 陣列。
JSON 物件與字典資料型別非常相似,其中資料儲存為鍵值對。此鍵值對中的鍵應該是字串,而值可以是物件、陣列或任何其他受支援的資料型別。
我們必須用冒號 :
分隔鍵和值,並用逗號 ,
分隔每個鍵值對。JSON 物件使用大括號 {}
表示。
我們可以通過將物件和陣列巢狀到我們的 JSON 物件中來製作任意複雜的 JSON 物件。它被稱為分層 JSON 物件。
下面是一個表示學生詳細資訊的 JSON 物件示例。
{"name": "Roger", "Roll": 22, "Class": "XI"}
請注意,我們已經用雙轉換逗號引用了字串值,而數字不需要引用。
我們剛剛討論了類似於字典的 JSON 物件。另一方面,JSON 陣列類似於列表。
我們將物件括在列表中的方括號 []
中。JSON 陣列可以包含任何受支援的資料型別,包括另一個陣列或 JSON 物件。
這是 JSON 陣列的示例。
[1, "abc", {"name":"xyz"}]
請注意,上面的 JSON 陣列包含一個數字、一個字串和一個物件。這意味著我們可以在陣列中儲存不同的資料型別。
在 Java 中使用 Java 的內建庫讀取 JSON 陣列
Java 是一種功能強大的語言,擁有大量的庫。幸運的是,我們有內建庫來讀取 Java 中的 JSON 物件和陣列。
此類庫有助於我們的工作,並使解析和讀取 JSON 物件和陣列變得簡單。在本文中,我們將學習在程式碼中使用此類庫來讀取 Java 中的 JSON 物件和 JSON 陣列。
在繼續編寫程式碼之前,我們建立一個 JSON 物件並將其儲存在一個檔案中。請注意,JSON 檔案的副檔名為 .json
。
因此,如果你想測試和執行程式碼,請複製並貼上以下 JSON 程式碼,並將副檔名為 .json
的檔案儲存在任何所需位置。JSON 程式碼如下所示。
[{
"name":"MMN",
"roll": 24,
"marks": [91, 95, 97, 97, 94],
"parents": {
"name": "IMT",
"mobile":"1234567890"
},
"hobbies": ["sports", "reading", "music"],
"others": ["A", 1]
}]
你應該注意,此 JSON 檔案包含一個帶有單個 JSON 物件的 JSON 陣列。然後,這個內部 JSON 物件包含幾個具有不同資料型別的鍵值對。
例如,name
是一個字串,roll
是一個整數(注意 JSON 將整數儲存為長整數),marks
是一個 JSON 陣列,parents
是另一個 JSON 物件,等等。因此,這是任意複雜 JSON 資料的示例。
讓我們瞭解如何使用 Java 讀取這樣的 JSON 物件。
在編寫程式碼之前,你必須確保已下載 JSON jar 檔案並新增指向該 JSON 檔案的 classpath
變數。如果你不這樣做,JSON 將不會被編譯。
我們可以像在 Java 中開啟任何其他檔案一樣開啟 JSON 檔案,主要是使用 File()
建構函式。
我們必須用 try-catch
塊包圍檔案開啟語句,以處理建構函式丟擲的必要異常。
一旦檔案開啟,它的物件就會被傳遞給 FileReader()
建構函式。
我們使用返回 Java 物件的 JSON 解析器來解析 JSON 內容。我們應該使用顯式轉換來轉換 JSON 陣列。
我們的 JSON 陣列包含一個物件,但在某些情況下,一個 JSON 陣列中可能有多個 JSON 物件,因此我們應該使用迴圈遍歷解析後的陣列。我們從解析的 JSON 陣列中提取每個 JSON 物件並進一步處理它。
請注意,我們應該知道我們正在迭代的 JSON 物件結構,因為我們需要使用鍵提取 JSON 物件中的值。
此外,我們通過將 JSON 物件傳遞給使用命名鍵的函式來提取資料。由於 JSON 物件包含不同的資料型別,因此可以相應地進行處理。
例如,我們顯示了整數、字串和陣列,但迭代了巢狀的 JSON 物件 parents
。下面的程式碼實現瞭解釋的邏輯。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class JSONReader {
public static void main(String [] args)
{
JSONParser parser = new JSONParser();
FileReader fileReader;
try {
File file = new File("/home/stark/eclipse-workspace-java/Aditya/src/data.json");
fileReader = new FileReader(file);
// Parser returns an object, we need an explicit cast to covert it into a JSONArray
JSONArray array = (JSONArray) parser.parse(fileReader);
//Traverse the list
for(int i=0;i<array.size();i++)
{
JSONObject obj = (JSONObject)array.get(i);
parseObject(obj);
}
}
catch(FileNotFoundException e)
{
System.out.println(e.getStackTrace()+ " :File Not Found");
}
catch(ParseException e)
{
System.out.println(e.getStackTrace()+ " :Could not parse");
}
catch(IOException e)
{
System.out.println(e.getStackTrace()+ " :IOException");
}
}
private static void parseObject(JSONObject obj) {
String name = (String)obj.get("name");
long roll = (long)obj.get("roll");
JSONArray marks = (JSONArray)obj.get("marks");
JSONArray hobbies = (JSONArray)obj.get("hobbies");
JSONObject parents = (JSONObject)obj.get("parents");
JSONArray others = (JSONArray)obj.get("others");
System.out.println("Name: "+name);
System.out.println("Roll: "+roll);
System.out.println("Marks: "+marks);
System.out.println("Hobbies: "+hobbies);
System.out.println("Parent's Name: "+parents.get("name")+", Mobile: "+parents.get("mobile"));
System.out.println("Others: "+others);
}
}
你應該在 File()
建構函式中指定檔案的正確路徑。上面程式碼的輸出如下。
Name: MMN
Roll: 24
Marks: [91,95,97,97,94]
Hobbies: ["sports","reading","music"]
Parent's Name: IMT, Mobile: 1234567890
Others: ["A",1]
まとめ
Java 是一種流行的程式語言,我們經常遇到需要資料交換的情況。儘管存在其他資料交換格式,但 JSON 是最流行、最簡單且易於理解的格式之一。
我們已經學習了 JSON 格式、它的資料型別以及用 Java 解析的 JSON 檔案。JSON 可以具有任意複雜的結構,使我們能夠交換任何 JSON 資料。
另一方面,Java 提供了一種簡單、獨特但功能強大的方法來處理 JSON。