更新时间:2022-04-26 11:30:10 来源:极悦 浏览2919次
在本教程中,极悦小编将告诉大家在 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": "http://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\": \"http://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\": \"http://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\": \"http://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天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习