基于json解析神器 jsonpath的使用说明

下面是基于Json解析神器JsonPath的使用说明的详细攻略。

什么是JsonPath?

JsonPath是一个基于Java的Json解析库,它可以用于解析Json数据并提取其中的内容。JsonPath使用类似XPath的查询语法,并支持大部分XPath表达式,同时还有一些自己的表达式。

如何使用JsonPath

步骤一:引入依赖

要使用JsonPath,我们需要将相关依赖添加到项目中。假设我们使用Maven来构建项目,那么只需要在pom.xml文件中添加以下依赖即可:

<dependency>
  <groupId>com.jayway.jsonpath</groupId>
  <artifactId>json-path</artifactId>
  <version>2.4.0</version>
</dependency>

步骤二:读取Json数据

在使用JsonPath解析Json数据之前,我们需要先将Json数据读取进来。JsonPath支持多种方式的Json数据输入,包括字符串、文件、URL和InputStream等。以读取一个Json文件为例,可以按照以下方式进行:

File jsonFile = new File("path/to/jsonfile.json");
String jsonStr = FileUtils.readFileToString(jsonFile,"UTF-8");
Object document = Configuration.defaultConfiguration().jsonProvider().parse(jsonStr);

这里用到了Apache Commons IO库来读取文件内容,如果你没有引入这个库,需要在pom.xml文件中添加以下依赖:

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>

步骤三:使用JsonPath表达式提取数据

有了Json数据之后,就可以使用JsonPath表达式提取数据了。JsonPath表达式以$符号开头,$符号代表Json数据的根节点。接下来是一些常用的JsonPath表达式:

  • $:根节点
  • .属性名:取子节点属性
  • ['属性名']:同上
  • [0]:取数组中第一个元素
  • [start:end]:取数组中从start位置开始,直到end位置结束的所有元素,包括start和end位置
  • [""]:根据键值对查找属性值

例如,假设我们有一个Json数据如下:

{
  "store": {
    "book": [
      {
        "category": "fiction",
        "author": "J.K. Rowling",
        "title": "Harry Potter and the Philosopher's Stone",
        "price": 8.99
      },
      {
        "category": "fiction",
        "author": "J.R.R. Tolkien",
        "title": "The Lord of the Rings",
        "price": 22.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  }
}

我们可以使用以下JsonPath表达式来提取数据:

  • $.store.book[0].author:取第一本书的作者
  • $.store.book[*].author:取所有书的作者
  • $.store.book[?(@.price < 10)].title:取价格小于10的书的标题
  • $.store.*:取store中所有的属性,包括book和bicycle
  • $.store..price:取store中所有price属性
  • $..book[?(@.author == 'J.K. Rowling')].title:根据作者查找书籍的标题

更多的JsonPath表达式可以参考这份文档

示例一:使用JsonPath提取Github API返回的数据

假设我们想从Github API获取某个用户的repositories信息,并提取其中的名字和URL。首先我们需要发送一个HTTP GET请求获取用户repositories的Json数据,然后使用JsonPath表达式提取数据。具体代码如下:

String username = "githubusername";
String url = "https://api.github.com/users/" + username + "/repos";

String response = HttpUtil.get(url);
Object document = Configuration.defaultConfiguration().jsonProvider().parse(response);

List<String> names = JsonPath.read(document, "$..name");
List<String> urls = JsonPath.read(document, "$..html_url");

for (int i = 0; i < names.size(); i++) {
    System.out.println(names.get(i) + ": " + urls.get(i));
}

这里用到了一个HttpUtil类来发送HTTP请求,你可以使用任何你熟悉的Http库来发送请求。示例结果如下:

GitHubAPI: https://github.com/username/GitHubAPI
OtherRepository: https://github.com/username/OtherRepository

示例二:使用JsonPath解析NBA比赛数据

假设我们想从NBA官网获取火箭队最近一场比赛的比分和对手,我们可以使用JsonPath解析官网提供的Json数据。具体代码如下:

String url = "https://china.nba.com/static/data/game/snapshot_0041800402.json";
String response = HttpUtil.get(url);
Object document = Configuration.defaultConfiguration().jsonProvider().parse(response);

String homeTeam = JsonPath.read(document, "$.payload.homeTeam.profile.city");
String homeScore = JsonPath.read(document, "$.payload.homeTeam.cumulativeScore");
String awayTeam = JsonPath.read(document, "$.payload.awayTeam.profile.city");
String awayScore = JsonPath.read(document, "$.payload.awayTeam.cumulativeScore");

System.out.println(homeTeam + " " + homeScore + ":" + awayScore + " " + awayTeam);

示例结果如下:

Houston 115:124 LA Clippers

好了,以上就是关于JsonPath的完整攻略了,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于json解析神器 jsonpath的使用说明 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 使用ObjectMapper把Json转换为复杂的实体类

    使用ObjectMapper把JSON转换为复杂的实体类的方法如下: 1.引入ObjectMapper库 在项目中引入ObjectMapper依赖即可,可以使用Maven或Gradle等构建工具。 Maven: <dependency> <groupId>com.fasterxml.jackson.core</groupId&g…

    Java 2023年5月26日
    00
  • 如何用java编写一个rmi

    下面是详细讲解如何用Java编写一个RMI服务的完整攻略: 1. 什么是RMI RMI(Remote Method Invocation)是Java中一种远程机制,允许在不同的Java虚拟机间,通过网络传输调用远程对象的方法。 2. 实现RMI服务的步骤 2.1 编写业务接口 首先需要编写业务接口,声明远程调用时需要使用的方法,例如: public inte…

    Java 2023年5月19日
    00
  • Java语言面向对象编程思想之类与对象实例详解

    Java面向对象编程思想之类与对象实例详解 在Java中,所有的事物都是对象,对象都有其自身的特征和行为。因此,Java是一种面向对象的语言。在Java中,类和实例是很重要的概念,我们需要对其进行深入的学习和理解。 类和对象 类是一种模板或蓝图,可以用来创建对象。具有相同属性和行为的对象,可以归纳为同一个类。对象则是类的一个实例,可以根据类来创建多个对象。 …

    Java 2023年5月26日
    00
  • Java对象深复制与浅复制实例详解

    Java对象深复制与浅复制实例详解 在 Java 中,对象的复制分为浅复制和深复制两种方式。本文将详细讲解 Java 中对象复制的概念、浅复制和深复制的实现方式、以及深浅复制的应用场景。 对象复制的概念 在 Java 中,我们可以通过 new 运算符来生成新的对象实例,但是有时候我们需要创建一个新对象,它的属性和原对象一模一样而且它们内存地址不同,这个时候就…

    Java 2023年5月26日
    00
  • java8新特性-lambda表达式入门学习心得

    Java 8新特性 – Lambda表达式入门学习心得 什么是Lambda表达式 Lambda表达式在Java 8中被引入,可以简化某些代码的书写。Lambda表达式本质上是一个匿名函数,可以传递给其他方法作为参数并被执行。它可以替代使用匿名内部类的情况,其中传递一个函数作为参数的情况非常常见。 Lambda 表达式语法 Lambda表达式的语法非常简洁。它…

    Java 2023年5月26日
    00
  • Spring Data JPA实现持久化存储数据到数据库的示例代码

    以下是详细的攻略: 一、什么是Spring Data JPA Spring Data JPA是Spring框架中对JPA(Java Persistence API)规范的封装。JPA是一种ORM(Object Relational Mapping)框架,用于将Java对象映射到关系型数据库。 Spring Data JPA对JPA的封装简化了数据访问层的开发…

    Java 2023年5月20日
    00
  • MyBatis Mapper接受参数的四种方式代码解析

    针对 MyBatis Mapper 接收参数的四种方式,我这里会进行详细的讲解,包括示例代码和解析。 第一种:基于注解的传参数 示例代码: @Select("select * from user where name=#{name} and age=#{age}") public List<User> selectUserBy…

    Java 2023年5月20日
    00
  • 详解java实现HTTP请求的三种方式

    详解Java实现HTTP请求的三种方式 HTTP请求是平时开发过程中经常用到的技术,Java语言也提供了多种方式实现HTTP请求。本文主要介绍Java实现HTTP请求的三个方式:URLConnection、HttpClient、OkHttp,分别详细说明其使用方法和注意事项。 使用URLConnection实现HTTP请求 发送GET请求 发送GET请求的代…

    Java 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部