更新時間:2022-04-26 11:30:10 來源:動力節點 瀏覽3774次
在本教程中,動力節點小編將告訴大家在 Java 中解析 JSON 的 3 種方法。首先,我們將看到理論信息,然后我們將看到它的實現示例。
大多數時候,無論數據是什么,應用程序都需要解析 JSON。有時我們想驗證 JSON 是否包含鍵或字段。
當我們在 Java 中簡單地解析 JSON 時,所有這些類型的問題和要求都可以滿足。以下是在 Java 中解析 JSON 的 3 種常用方法:
1.通過使用 org.json 庫
2.在 Java 中使用 Gson 解析 JSON
3.使用 JsonPATH 解析
讓我們詳細討論每種方式。假設我們有下面給出的 JSON,并且我們想要檢索pageName、pagePic和post_id的值。
{
"pageInfo": {
"pageName": "Codezup Homepage",
"logo": "https://codezup.com/logo.jpg"
},
"posts": [{
"post_id": "987456123",
"actor_id": "101",
"author_name": "Robert",
"post_title": "How to parse JSON in Java by codezup.com",
"comments": [],
"time_of_post": "5689563245"
}]
}
為了使用org.json解析 JSON 數據,我們需要在下面提到 maven 依賴項。如果您正在處理 Maven 項目,則將其包含在您的 pom.xml 文件中,否則,您可以下載該 jar 并將其添加到您的項目類路徑中。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
</dependency>
以下是解析 JSON 的分步信息以及編碼示例。
首先,我們使用JSONObject類將 JSON 字符串轉換為 JSON 對象。
如果你清楚地觀察到 JSON,那么你可以清楚地理解 pageInfo 也是一個 JSONObject,我們需要使用getJSONObject方法來獲取它。
同樣,posts 是一個 JSON 數組,所以我們需要使用getJSONArray方法來獲取它。
下面是用 org.json 解析 JSON 的完整代碼。
package com.parsejsonexample;
import org.json.JSONArray;
import org.json.JSONObject;
public class ParseJSONExample {
private static String sampleJson = "{\"pageInfo\": {\"pageName\": \"Codezup Homepage\",\"logo\": \"https://codezup.com/logo.jpg\"},\"posts\": [{\"post_id\": \"987456123\",\"actor_id\": \"101\",\"author_name\": \"Robert\",\"post_title\": \"How to parse JSON in Java by codezup.com\",\"comments\": [],\"time_of_post\": \"5689563245\"}]}";
public static void main(String[] args) {
JSONObject obj = new JSONObject(sampleJson);
String pageName = obj.getJSONObject("pageInfo").getString("pageName");
System.out.println(pageName);
JSONArray arr = obj.getJSONArray("posts");
for (int i = 0; i < arr.length(); i++) {
String post_id = arr.getJSONObject(i).getString("post_id");
System.out.println(post_id);
}
}
}
輸出
Codezup Homepage
987456123
現在下一步是使用 Gson Java 庫解析 JSON。
為了使用Gson解析 JSON 數據,如果我們正在處理 Maven 項目,我們需要在 pom.xml 中添加提及依賴項。否則,我們需要在項目類路徑中手動添加一個jar。
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.7</version>
</dependency>
下面給出了使用 Gson 解析 JSON 的完整代碼,以及我們在 org.json 中使用的類似概念。
package com.parsejsonexample;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
public class ParseJSONExample {
private static String sampleJson = "{\"pageInfo\": {\"pageName\": \"Codezup Homepage\",\"logo\": \"https://codezup.com/logo.jpg\"},\"posts\": [{\"post_id\": \"987456123\",\"actor_id\": \"101\",\"author_name\": \"Robert\",\"post_title\": \"How to parse JSON in Java by codezup.com\",\"comments\": [],\"time_of_post\": \"5689563245\"}]}";
public static void main(String[] args) {
JsonObject jsonObject = new JsonParser().parse(sampleJson).getAsJsonObject();
String pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsString();
System.out.println(pageName);
JsonArray arr = jsonObject.getAsJsonArray("posts");
for (int i = 0; i < arr.size(); i++) {
String post_id = arr.get(i).getAsJsonObject().get("author_name").getAsString();
System.out.println(post_id);
}
}
}
輸出
Codezup Homepage
Robert
如果您想了解 Gson 在應用程序中的更多用法,那么您可以查看我們如何使用 Gson 將 JSON 轉換為 Map。
這兩個(org.json 和 Gson)是開發人員用來解析 JSON 的最常用方法。這兩種方法需要在訪問我們從 JSON 中選擇的屬性之前將 JSON 完全反序列化為 Java 對象。
但是如果不想反序列化怎么辦?還有其他解析 JSON 的解決方案嗎?
是的,我們可以利用 JsonPATH 庫,它更像是 JSON 的 XPath,我們可以用它來遍歷 Json 對象。讓我們在下一節中使用 JsonPATH 檢查解決方案。
要使用下面的這個庫,需要給定 maven 依賴項,或者您可以下載 JAR 并將其手動添加到項目類路徑中。
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.6.0</version>
</dependency>
下面是使用 JsonPATH 庫解析 JSON 的完整編碼示例。
package com.parsejsonexample;
import com.jayway.jsonpath.JsonPath;
public class ParseJSONExample {
private static String sampleJson = "{\"pageInfo\": {\"pageName\": \"Codezup Homepage\",\"logo\": \"https://codezup.com/logo.jpg\"},\"posts\": [{\"post_id\": \"987456123\",\"actor_id\": \"101\",\"author_name\": \"Robert\",\"post_title\": \"How to parse JSON in Java by codezup.com\",\"comments\": [],\"time_of_post\": \"5689563245\"}]}";
public static void main(String[] args) {
String pageName = JsonPath.read(sampleJson, "$.pageInfo.pageName");
System.out.println(pageName);
Integer posts = JsonPath.read(sampleJson, "$.posts.length()");
for (int i = 0; i < posts; i++) {
String post_id = JsonPath.read(sampleJson, "$.posts[" + i + "].author_name");
System.out.println(post_id);
}
}
}
輸出
Codezup Homepage
Robert
這就是本教程的全部內容。希望您能夠理解在 Java 中解析 JSON 的所有三種非常基本的方法。
但是,org.json 和 Gson 需要在遍歷實際對象之前將 JSON 反序列化為 Java 對象。但是也有使用 XPath 概念的 JsonPATH 方法。如果您想了解更多相關知識,不妨來關注一下動力節點的Java在線學習,里面的課程內容更加全面,適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習