Java JSON 處理 (JSON-P) 示例
介紹
由於強大的 Java JSON 處理 (JSON-P) API,Java 程式可以操作 JSON 資料。Web 伺服器和客戶端經常使用輕量級 JSON 資料傳輸標準交換資料。JSON-P 提供物件模型 API 和流式 API 作為其處理 JSON 資料的兩種主要方法。
讓我們討論這兩種策略,並使用示例來說明它們的工作原理和功能。我們希望讀者透過理解本文關於 Java JSON 處理 (JSON-P) 示例的解釋,瞭解物件模型 API 和流式 API 以及程式設計示例。
Java JSON 處理 (JSON-P) 的特性
我們知道 JSON-P 為我們提供了兩種不同的處理 JSON 資料的特性:
物件模型 API − 此方法將 JSON 資料顯示為由物件、陣列和值組成的結構,就像一棵樹一樣。它類似於 XML 的 DOM 解析器。物件模型 API 簡化了在管理小型 JSON 資料時導航和修改 JSON 部分的操作。
流式 API − 流式 API 順序處理 JSON 資料,而不是將整個 JSON 放入記憶體中,這使其成為一種更節省記憶體的方法。它適用於處理大型 JSON 資料,類似於使用 StAX 解析器處理 XML。
使用物件模型 API 讀取和解析 JSON 資料
在這個程式設計示例中,我們將學習如何使用物件模型 API 讀取和解析 JSON 資料。
示例
import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class ModObjtest { public static void main(String args []) throws IOException { try (InputStream fis = new FileInputStream("data.json"); JsonReader jsonReader = Json.createReader(fis)) { JsonObject jsonObject = jsonReader.readObject(); // Step 4: fetch data from the JsonObject String name = jsonObject.getString("name"); int age = jsonObject.getInt("age"); boolean isMarried = jsonObject.getBoolean("isMarried"); // print data System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("Married: " + isMarried); } } }
輸出
** data.json output** { "name": "Sheli Sharma", "age": 28, "isMarried": true } ** ModObjtest.java output** Name: Sheli Sharma Age: 28 Married: true
為此,我們在程式中匯入了一些重要的包。
javax.json.Json; javax.json.JsonObject; javax.json.JsonReader; java.io.FileInputStream; java.io.IOException; java.io.InputStream;
之後,我們定義了一個名為 ModObjTest 的類,並在類中呼叫了 main() 函式。在 main 函式中,我們丟擲 IOException 並開啟一個輸入流以從檔案讀取 JSON 資料。
try (InputStream fis = new FileInputStream("data.json");
之後,我們建立了一個 JsonReader 來讀取 JSON 資料,方法是建立名為 jsonReader 的類的物件並呼叫名為 readObject() 的函式。
JsonReader jsonReader = Json.createReader(fis)) {
現在,我們透過建立名為 jsonObject 的名為 jsonObject 的類的物件並呼叫名為 readobject() 的函式,將 JSON 資料解析為 JsonObject。
JsonObject jsonObject = jsonReader.readObject();
現在,我們透過宣告一個名為“name”的字串並呼叫名為 getString() 的函式並將“name”的值作為函式括號內的引數來從 JsonObject 中獲取資料。
String name = jsonObject.getString("name");
現在,我們聲明瞭另一個名為“age”的變數,它是整數型別,並呼叫另一個名為 getInt() 的函式,並將“age”的值作為函式括號內的引數。
int age = jsonObject.getInt("age");
現在,我們呼叫了另一個名為 getBoolean() 的函式,並將“isMarried”的值作為函式括號內的引數,並將該值儲存到另一個名為“ismarried”的布林型別變數中。
boolean isMarried = jsonObject.getBoolean("isMarried");
現在,我們列印所有資料以獲得所需的輸出。
System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("Married: " + isMarried);
使用 JSON-P 流式 API 生成 JSON 資料
在這個特殊的程式設計示例中,我們將瞭解如何使用 JSON-P 流式 API 生成 JSON 資料。
示例
import javax.json.Json; import javax.json.JsonObject; import javax.json.stream.JsonGenerator; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class StreamJsontest { public static void main(String args []) throws IOException { try (OutputStream fos = new FileOutputStream("output.json"); JsonGenerator jsonGenerator = Json.createGenerator(fos)) { // Generate JSON data using the Streaming API jsonGenerator.writeStartObject() .write("name", "Aishee") .write("age", 25) .write("isStudent", true) .writeStartObject("indianName") .write("firstName", "Aarav") .write("lastName", "Sharma") .writeEnd() .writeStartObject("indianAddress") .write("homeNo", "325") .write("street", "SY Avenue") .write("hometown", "Kolkata") .write("state", "WB") .write("pin", "400001") .writeEnd() .writeEnd(); // Close the JSON generator jsonGenerator.close(); }s // Read JSON data from the file and convert it to a string String jsonString = readJsonFromFile("output.json"); System.out.println(jsonString); } private static String readJsonFromFile(String file) throws IOException { try (InputStream fis = new FileInputStream(file); JsonReader jsonReader = Json.createReader(fis)) { JsonObject jsonObject = jsonReader.readObject(); return jsonObject.toString(); } } }
輸出
{"name":"Aishee","age":25,"isStudent":true, "indianName":{"firstName":"Aarav","lastName":"Sharma"}, "indianAddress":{"homeNo":"325","street":"SY Avenue", "hometown":"Kolkata","state":"WB","pin":"400001"}}
為此,首先我們在程式中匯入了一些重要的包。
javax.json.Json; javax.json.JsonObject; javax.json.JsonReader; java.io.FileInputStream; java.io.IOException; java.io.InputStream;
現在,我們定義了一個名為 StreamJsonTest 的類,並在函式中呼叫了丟擲 IOException 的 main() 函式。在 main() 函式中,我們透過呼叫名為 writeStarObject() 的函式使用流式 API 生成 JSON 資料。
jsonGenerator.writeStartObject()
現在,我們透過呼叫另一個名為 json.genearator 的函式關閉 json 生成器。
jsonGenerator.close();
之後,我們讀取檔案中的 JSON 資料並將其轉換為字串,方法是呼叫另一個名為 readJsonFromFile() 的重要函式並列印 json 字串。
String jsonString = readJsonFromFile("output.json"); System.out.println(jsonString);
現在,我們丟擲了另一個重要的 throws IOException 並將 jsonReadObject 建立為名為 jsonReadObject 的類,並呼叫另一個名為 createReader() 的函式。
JsonReader jsonReader = Json.createReader(fis))
最後,我們返回了 jsonObject.toString()。
結論
在本文中,我們涵蓋了 Java 中 JSON 處理的所有主要主題。這是關於當前 IT 軟體開發行業現狀的 Java 的一個非常重要的主題。Java 中 JSON 處理的價值是無價的。因此,我們盡最大努力用邏輯程式設計示例及其解釋來涵蓋該主題的所有方面。