专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java解析json字符串的三种方法

Java解析json字符串的三种方法

更新时间:2022-04-26 11:30:10 来源:赢咖4 浏览2720次

在本教程中,赢咖4小编将告诉大家在 Java 中解析 JSON 的 3 种方法。首先,我们将看到理论信息,然后我们将看到它的实现示例。

解析 JSON 概述

大多数时候,无论数据是什么,应用程序都需要解析 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 数据

为了使用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

为了使用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 检查解决方案。

使用 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 方法。如果您想了解更多相关知识,不妨来关注一下赢咖4的Java赢咖4在线学习,里面的课程内容更加全面,适合小白学习,希望对大家能够有所帮助。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>