JsonPath全英文文档学习

news2024/9/21 10:40:54

JsonPath全英文文档学习

  • 1、文档地址
  • 2、引入依赖
  • 3、浏览翻译问题修复
  • 4、文档学习
    • 4.1、Operator
    • 4.2、Functions
    • 4.3、Filter 运算符
    • 4.4、json示例
  • 5、实战
    • 5.1、获取json数组下的多个元素
    • 5.2、获取json数组下的多个元素(循环遍历时无元素自动占位)
    • 5.3、获取json数组下的单个元素
    • 5.4、获取json数组下存在某个元素的其他元素集合
    • 5.5、根据json数组重组List<Map<String,Object>>
    • 5.6、时间戳转date
    • 5.7、json数组转对象
    • 5.8、筛选器获取List<Map<String,Object>>
    • 5.9、筛选器根据字段是否存在获取List<Map<String,Object>>
    • 5.10、根据json数组三参数获取List< Object>
    • 5.11、set元素值
    • 5.12、避免空路径异常(DEFAULT_PATH_LEAF_TO_NULL)
    • 5.13、返回列表(ALWAYS_RETURN_LIST)
    • 5.14、不从路径评估传播异常(SUPPRESS_EXCEPTIONS)
    • 5.15、从路径评估抛出异常设置(REQUIRE_PROPERTIES)

1、文档地址

github地址

2、引入依赖

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

在这里插入图片描述

全英文文档可借助谷歌浏览器翻译

但谷歌浏览器无法翻译
在这里插入图片描述

3、浏览翻译问题修复

因为谷歌翻译下架了。所以下载一个别的强大的浏览器edge浏览器

下载安装沉浸式翻译插件

翻译成功
在这里插入图片描述

can you speck chinese ,yes

4、文档学习

4.1、Operator

在这里插入图片描述

4.2、Functions

在这里插入图片描述
在这里插入图片描述

4.3、Filter 运算符

在这里插入图片描述

在这里插入图片描述

4.4、json示例

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

5、实战

5.1、获取json数组下的多个元素

$.父级.key[*].元素

 List<String> authorList = JsonPath.read(jsonStr, "$.store.book[*].author");
 List<String> categoryList = JsonPath.read(jsonStr, "$.store.book[*].category");

        log.info("authorList:{}",authorList);
        log.info("categoryList:{}",categoryList);
      

在这里插入图片描述

必须填写父级一层一层找下去,否则爆异常
在这里插入图片描述

5.2、获取json数组下的多个元素(循环遍历时无元素自动占位)

在这里插入图片描述
比如取book下的isbn。第0,第1位下无此元素。则第2,3位自动占位到list的0,1位

List<String> isbnList = JsonPath.read(jsonStr, "$.store.book[*].isbn");
log.info("isbnList:{}",isbnList);

在这里插入图片描述

###如果多次使用JsonPath.read()需要先解析json。拿到object后。在调用.read()方法

        // 初始化一次
        Object document = Configuration.defaultConfiguration().jsonProvider().parse(jsonStr);

        List<String> authorList = JsonPath.read(document, "$.store.book[*].author");
        List<String> categoryList = JsonPath.read(document, "$.store.book[*].category");
        List<String> isbnList = JsonPath.read(document, "$.store.book[*].isbn");
        log.info("authorList:{}",authorList);
        log.info("categoryList:{}",categoryList);
        log.info("isbnList:{}",isbnList);

5.3、获取json数组下的单个元素

直接取jsonArray下元素:

        String author0 = JsonPath.read(document, "$.store.book[0].author");
        log.info("author0:{}",author0);

在这里插入图片描述

动态遍历获取jsonArray下元素

 if (!CollectionUtils.isEmpty(authorList)) {
            for (int i = 0; i < authorList.size(); i++) {
                // 拼接动态jsonPath
                String jsonPathStrPrefix = "$.store.book[";
                String jsonPathStrSuffix = "].author";
                String author = JsonPath.read(document, jsonPathStrPrefix.concat(String.valueOf(i)).concat(jsonPathStrSuffix));
                System.out.println(author);
            }
        }

在这里插入图片描述

5.4、获取json数组下存在某个元素的其他元素集合

ReadContext ctx = JsonPath.parse(jsonStr);

List<String> authorsOfBooksWithISBN = ctx.read("$.store.book[?(@.isbn)].author");

System.out.println("authorsOfBooksWithISBN:"+authorsOfBooksWithISBN);

在这里插入图片描述

5.5、根据json数组重组List<Map<String,Object>>

获取价格>10的 books数组

 List<Map<String, Object>> expensiveBooks = JsonPath
                .using(Configuration.defaultConfiguration())
                .parse(jsonStr)
                .read("$.store.book[?(@.price > 10)]", List.class);

或者

List<Map<String, Object>> books =  JsonPath.parse(jsonStr)
                .read("$.store.book[?(@.price > 10)]");

在这里插入图片描述

5.6、时间戳转date

  String json = "{\"date_as_long\" : 1411455611975}";

        Date date = JsonPath.parse(json).read("$['date_as_long']", Date.class);
        System.out.println("date:"+date);

在这里插入图片描述

5.7、json数组转对象

Book

package com.ljs.gulimall.product.entity;

import lombok.Data;

@Data
public class Book {
    private String category;

    private String author;

    private String title;

    private Double price;

    private String isbn;
}

Book book = JsonPath.parse(jsonStr).read("$.store.book[0]", Book.class);
System.out.println("book:"+book);

5.8、筛选器获取List<Map<String,Object>>

获取json数组book下category元素是fiction且价格小于10的集合

  Filter cheapFictionFilter = filter(
                where("category").is("fiction").and("price").lte(10D)
        );
        List<Map<String, Object>> books =
                parse(jsonStr).read("$.store.book[?]", cheapFictionFilter);
        System.out.println("books:"+books);

在这里插入图片描述

5.9、筛选器根据字段是否存在获取List<Map<String,Object>>

 Filter fooOrBar = filter(
                where("isbn").exists(true)).or(where("category").exists(true)
        );

        Filter fooAndBar = filter(
                where("isbn").exists(true)).and(where("foo").exists(true)
        );
        List<Map<String, Object>> bookAnd =
                parse(jsonStr).read("$.store.book[?]", fooAndBar);
        System.out.println("bookAnd:"+bookAnd);

        List<Map<String, Object>> bookOr =
                parse(jsonStr).read("$.store.book[?]", fooOrBar);
        System.out.println("bookOr:"+bookOr);

在这里插入图片描述

5.10、根据json数组三参数获取List< Object>

   Predicate booksWithISBN = new Predicate() {
            @Override
            public boolean apply(PredicateContext ctx) {
                return ctx.item(Map.class).containsKey("isbn");
            }
        };

        List<Object> books =
                parse(jsonStr).read("$.store.book[?].isbn", List.class, booksWithISBN);
        System.out.println("books:"+books);

在这里插入图片描述

5.11、set元素值

String newJson = JsonPath.parse(jsonStr).set("$['store']['book'][0]['author']", "ljs").jsonString();
System.out.println("jsonStr:"+newJson);

在这里插入图片描述

5.12、避免空路径异常(DEFAULT_PATH_LEAF_TO_NULL)

在这里插入图片描述

 Configuration configuration = Configuration.defaultConfiguration();

//Works fine
String gender0 = JsonPath.using(configuration).parse(str).read("$[0]['gender']");
//PathNotFoundException thrown
String gender1 = JsonPath.using(configuration).parse(str).read("$[1]['gender']");

System.out.println("gender0:"+gender0);
System.out.println("gender1:"+gender1);

在这里插入图片描述

    Configuration conf2 = configuration.addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL);

//Works fine
String gender0 = JsonPath.using(conf2).parse(str).read("$[0]['gender']");
//Works fine (null is returned)
String gender1 = JsonPath.using(conf2).parse(str).read("$[1]['gender']");
System.out.println("gender0:"+gender0);
System.out.println("gender1:"+gender1);

在这里插入图片描述

5.13、返回列表(ALWAYS_RETURN_LIST)

 Configuration configuration = Configuration.defaultConfiguration();
List<String> genders0 = JsonPath.using(configuration).parse(str).read("$[0]['gender']");
System.out.println("genders0:"+genders0);

在这里插入图片描述

Configuration configuration = Configuration.defaultConfiguration();
Configuration conf2 = configuration.addOptions(Option.ALWAYS_RETURN_LIST);

//Works fine
List<String> genders0 = JsonPath.using(conf2).parse(str).read("$[0]['gender']");
System.out.println("genders0:"+genders0);

在这里插入图片描述

5.14、不从路径评估传播异常(SUPPRESS_EXCEPTIONS)

如果存在选项 ALWAYS_RETURN_LIST,将返回一个空列表

如果选项 ALWAYS_RETURN_LIST 不存在,则返回 null

5.15、从路径评估抛出异常设置(REQUIRE_PROPERTIES)

Configuration configuration = Configuration.defaultConfiguration();
//Works fine
List<String> genders = JsonPath.using(configuration).parse(str).read("$[*]['gender']");
System.out.println("genders:"+genders);

在这里插入图片描述

Configuration configuration = Configuration.defaultConfiguration();
Configuration conf2 = configuration.addOptions(Option.REQUIRE_PROPERTIES);

//PathNotFoundException thrown
List<String> genders = JsonPath.using(conf2).parse(str).read("$[*]['gender']");
System.out.println("genders:"+genders);

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面了阿里大模型算法岗,出门秒挂。。。

最近这一两周看到不少互联网公司都已经开始秋招提前批面试了。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些…

基于springboot+enum配置化实践

前言 Springboot/Springcloud作为微服务开发的经典框架&#xff0c;我想任何一个developer不会排斥。同时&#xff0c;市场越来越多的业务开发均围绕Springboot/Springcloud而展开&#xff0c;也让它成为Java开发的“硬通货”。 基于Spring&#xff0c;诸多低代码的平台的活跃…

基于SpringBoot的校园跑腿系统+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

spring项目整合log4j2日志框架(含log4j无法打印出日志的情况,含解决办法)

Spring整合Log4j2的整体流程 1&#xff09;导入log4j-core依赖 <!--导入日志框架--><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0</version></dependenc…

Linux中的gdb调试器

目录 一、程序的两种模式 二、gdb的常用调试命令 一、程序的两种模式 程序通常有两种模式&#xff0c;分别是debug模式和release模式 debug模式可以调试&#xff0c;但是release模式不支持调试&#xff0c;因为debug模式添加了调试信息&#xff0c;因此debug的程序大小比rel…

[苍穹外卖]-05Redis快速入门

Redis入门 Redis是一个基于内存的key-value结构数据库 基于内存存储, 读写性能高适合存储热点数据(热点商品,咨询,新闻)企业应用广泛中文官网: Redis中文网英文网: https://rsdis.io 下载安装: Redis安装包分为Windows版本和Linux版本, Redis的windows版属于绿色软件, 解压后…

sqlmap简介及安装

sqlmap简介及安装 sqlmap 介绍 sqlmap 是一个开源的渗透测试工具&#xff0c;可以用来进行自动化检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器的权限。它具有功能强大的检测引擎&#xff0c;针对各种不同类型数据库的渗透测试的功能选项&#xff0c;包括获取…

【Hot100】LeetCode—198. 打家劫舍

目录 1- 思路动规五部曲 2- 实现⭐198. 打家劫舍——题解思路 3- ACM 实现 原题链接&#xff1a;198. 打家劫舍 1- 思路 动规五部曲 1- 定义 dp 数组 int[] dp new int[nums.length]dp[i] 代表考虑下标i 偷的最大金币数 2- 递推公式 当偷 i &#xff1a; dp[i-2] nums[i] 当…

Typora调整图片大小:两种方式zoom或width/height

目录 01 zoom方式02 width/height方式2.1 width方式 2.2 height方式 01 zoom方式 语法: <img src"your-image-url" style"zoom:your-zoom-integer"/> 示例&#xff1a;将图片(./image/market.jpg)调整为原图减少50%大小的命令为&#xff1a; …

[数据集][目标检测]肺炎检测数据集VOC+YOLO格式4983张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4983 标注数量(xml文件个数)&#xff1a;4983 标注数量(txt文件个数)&#xff1a;4983 标注…

github actions CICD简单使用案例

参考&#xff1a; https://developer.aliyun.com/article/1540773 https://github.com/ViggoZ/producthunt-daily-hot/blob/main/.github/workflows/generate_markdown.yml 1、创建github项目 目录&#xff1a; .github/workflows/fetch-news.yml actions执行yaml&#xff08;…

Linux 下 C/C++ 程序编译的过程

目录 一、GCC 工具链二、编译过程1、预处理2、编译3、汇编4、链接 本文将介绍如何将 C/C 语言编写的程序转换成为处理器能够执行的二进制代码的过程&#xff0c;包括四个步骤&#xff1a;预处理&#xff08;Preprocessing&#xff09;编译&#xff08;Compilation&#xff09;汇…

如何通过食堂采购小程序端降低成本,提升效率?

随着数字化管理工具的普及&#xff0c;越来越多的食堂正在引入小程序来优化采购流程&#xff0c;减少成本和提升效率。食堂采购小程序端通过技术手段实现了自动化、智能化的管理方式&#xff0c;为管理者提供了极大的便利。本文将探讨如何利用技术手段开发一个高效的食堂采购小…

【MATLAB】数据和字符串类型转换

数据和字符串类型转换 在 MATLAB 中&#xff0c;支持不同数据类型与字符串类型之间的转换&#xff0c;这需要使用不同的函数来实现。此外&#xff0c;相同的数据&#xff0c;特别是整数&#xff0c;可以用多种格式表示&#xff0c;例如十进制、二进制或十六进制。在 C 语言中&a…

vulhub远程执行命令漏洞CVE-2017-12636

1.打开环境 2.访问目标网站 CVE-2017-12636是一个任意命令执行漏洞&#xff0c;我们可以通过config api修改couchdb的配置query_server&#xff0c;这个配置项在设计、执行view的时候将被运行。 3.在网站中发现一个user表&#xff0c;我们可以带你进去看一下 里面是一个用户名…

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎&#xff0c;细嗅蔷薇。你好朋友&#xff0c;这里是锅巴的C\C学习笔记&#xff0c;常言道&#xff0c;不积跬步无以至千里&#xff0c;希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目&#xff1a; 牛牛发明了一种新的四舍五…

C语言手撕归并——递归与非递归实现(附动画及源码)

&#x1f916;&#x1f4bb;&#x1f468;‍&#x1f4bb;&#x1f469;‍&#x1f4bb;&#x1f31f;&#x1f680; &#x1f916;&#x1f31f; 欢迎降临张有志的未来科技实验室&#x1f916;&#x1f31f; 专栏&#xff1a;数据结构 &#x1f468;‍&#x1f4bb;&#x1f…

【Python基础】Python函数

本文收录于 《Python编程入门》专栏&#xff0c;从零基础开始&#xff0c;分享一些Python编程基础知识&#xff0c;欢迎关注&#xff0c;谢谢&#xff01; 文章目录 一、前言二、函数的定义与调用三、函数参数3.1 位置参数3.2 默认参数3.3 可变数量参数&#xff08;或不定长参数…

springboot项目--后端问题记录

springboot项目后端记录 前言一、包1. lombok--自动生成勾子方法作用依赖使用 2. Validated--自动校验作用依赖使用一般参数校验实体参数校验 结论 3. JWT(json web taken) 令牌生成什么是takenJWT包依赖使用获取taken校验 封装的工具类使用 二、处理技巧1. 全局异常处理作用代…

服务器禁用远程(22)

vim /etc/ssh/sshd_config 修改 ListenAddress 0.0.0.0 为ListenAddress localhost 修改完后 重启一下sshd systemctl restart sshd 修改就生效了