Java对JSON路径解析JsonPath例子

2023-11-20

1.jsonpath的特点

  1. 不需要定义java bean、不用对多层map多次迭代,就可以获得json解析树中深层次的节点
  2. Jayway的jsonpath解析需要把要解析的json一次加载进内存?
2.1 jsonpath表达式的两种方式
{
    "tool": 
    {
        "jsonpath": 
        {
            "creator": 
            {
                "name": "Jayway Inc.",
                "location": 
                [
                    "Malmo",
                    "San Francisco",
                    "Helsingborg"
                ]
            }
        }
    },
    "book": 
    [
        {
            "title": "Beginning JSON",
            "price": 49.99
        },

        {
            "title": "JSON at Work",
            "price": 29.99
        }
    ]
}

下面两种方式都是获取里层的location节点的第三个元素:

  1. 点号表达式: $.tool.jsonpath.creator.location[2]
  2. 中括号表达式: $[‘tool’][‘jsonpath’][‘creator’][‘location’][2]
2.2 jsonpath的三个符号
  1. $: 表示json结构的根节点,可以表示一个对象(object)、数组(array)
  2. @: 表示当前正在处理的节点,常作为谓词表达式的一部分,假设我们正在处理book数组节点,那么
    book[?(@.price == 49.99)]指的是book数组内的第一个节点
  3. *: 表示指定范围内所有元素,是一个通配符,比如book[*]表示book数组内部所有节点
2.3.1 函数

支持在pattern中使用: min(), max(), avg(), stddev() and length().

2.3.1 过滤器

就是布尔表达式来确定那些node可以作为结果返回:

  1. 相等: ==
  2. 正则匹配: =~
  3. 包含: in

过滤器在code中的三种形式:

  1. 使用预定义的Filter api
  2. 实现 Predicate 接口,实现自定义filter
  3. 在pattern里内联filter逻辑,不创建filter对象
2.4 jsonpath的输入

input通过重载(overload)JsonPath.parse()支持String、Object、InputStream、File、URL对象

2.5 修改默认设置
  1. Option.AS_PATH_LIST : 返回节点的path而不是返回值
  2. Option.DEFAULT_PATH_LEAF_TO_NULL:所有没有的节点返回null
2.6 SPI
  1. JsonProvider SPI: lets us change the ways JsonPath parses and handles JSON documents.
  2. MappingProvider SPI: allows for customization of bindings between node values and returned object types.
  3. CacheProvider SPI: adjusts the manners that paths are cached, which can help to increase performance.

3.json解析的一些方式:

  1. json->bean: 需要预先定义java bean
  2. json->Map: 较为深层次的节点需要多次迭代
  3. jsonpath: 使用复杂的jsonpath表达式来直接获取任意层次节点

4.适用场景

  1. json->bean: 适合json作为配置文件时,配置文件解析首先考虑可读性,所以优选定义java bean(java bean可读性高)
  2. json->Map:

5.支持几种解析方式的库?

6.库功能支持对比、解析效率对比?

7.代码例子

github例子:https://github.com/cbfsuper/JavaForOpen/blob/main/Utils/src/main/java/com/cdb/jsonparse/JsonPathParserTest.java
参考:https://www.baeldung.com/guide-to-jayway-jsonpath

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java对JSON路径解析JsonPath例子 的相关文章

随机推荐

  • 获取对象Object的长度

    获取对象的长度 obj id 1 id2 1 id3 1 id4 1 id5 1 id6 1 id7 1 id8 1 id9 1 id10 1 let i Object keys this obj length console log i
  • 嵌入式linux 搭建L2TP+IPSEC客户端

    搭建L2TP IPSEC客户端需要对应的源码 xl2tpd 1 3 10和openswan 还需要一些依赖的库 gmp libpcap 一 安装openswan 安装依赖库gmp 6 1 2 1 下载 https gmplib org DO
  • C#操作SqlServer数据库,以及其常用的对象

    C 操作SQL Server数据库 1 概述 ado net提供了丰富的数据库操作 这些操作可以分为三个步骤 第一 使用SqlConnection对象连接数据库 第二 建立SqlCommand对象 负责SQL语句的执行和存储过程的调用 第三
  • 服务器备案问题解决思考?

    大家和我一样有没有在项目上线之后遇到服务器需要备案的问题呢 遇到这个问题的原因 域名没有备案 可是我发现我域名本案后还是无法通过域名直接解析到服务器80端口 所以我百度后发现 服务器竟然也要备案 而且备案步骤 手续与域名备案相比是真的麻烦
  • Docker搭建mysql主从

    目录 1 安装配置master 1 1 运行mysql容器 1 2 更新基础软件和安装vim 1 3 编辑配置文件 1 4 创建用户并授权 用于再主从库之间同步数据 2 slave数据库安装配置 2 1 运行容器 2 2 进入容器内部 2
  • JavaWeb的高级、Listener监听器--Servlet事件

    一 学习目标 1 Listener监听器 2 Listener监听器作用 3 Listener监听器的创建与销毁 二 重点知识 1 Listener监听器 Filter和Listener是Servlet规范中的两个高级特性 不同于Servl
  • vue项目打包后如何本都部署访问

    npm run build生成dist项目后 在windows部署访问 方式一 1 新建一个文件夹 进入目录后打开cmd 输入npm init y 2 输入 npm i express s 是用于在 Node js 项目中安装 Expres
  • 小程序实现微信登录Java后端(一)--前端实现

    目录 一 概述 二 登录流程 三 前端代码 四 解读前端代码 1 登录部分 2 检查当前用户是否已登录 3 小程序启动时校验登录 五 阶段性小结 一 概述 最近终于有时间去搞一下准备参加比赛的小程序 小程序一开始设计的是使用邮箱登录 老师建
  • 剑指offer——输出数组中k个最小值(快速,冒泡,选择,插入)

    找k个最小值 基本思路是对数组排序 输出前k个或者后k个 我们回顾一下之前的学习过的集中排序方法 快速排序 class Solution def GetLeastNumbers Solution self tinput k def quic
  • rust房屋建造蓝图_妄想山海房子建造攻略

    妄想山海这个游戏的一大特色就是玩家可以在游戏里建造属于自己的房屋 而且这个房屋可不是几个图或是简单的3d模型 而是一个完整的房屋呦 玩家可以创作或是收集来的房屋设计图 真实打造 所以在妄想山海里房子的建造还是要花点功夫的 下面讯喵喵就为大家
  • Redis 分布式缓存

    分布式缓存 单点 Redis 的问题及解决 数据丢失 实现Redis数据持久化 并发能力 搭建主从集群 实现读写分离 存储能力 搭建分片集群 利用插槽机制实现动态扩容 故障恢复能力 利用哨兵机制 实现健康检测和自动恢复 RDB RDB全称R
  • 利用接口请求获取文件

    1 背景 测试阶段文件上传服务器为测试文件服务器 预览时根据id获取的测试服务器文件 但发到线上后发现文件上传到了测试服务器 读取文件时又是从线上的文件服务器读取的 因此导致了文件显示异常 2 数据恢复分析 先从测试环境获取到文件 这些文件
  • 微信小程序图片使用filter将彩色图片变成黑白以后,border-radius失效的解决办法

    使用css的filter将彩色图片亮度降低之后 设置的border radius会出现失效不起作用的情况 需求 用户在线头像为原始的彩色图片 离线将用户头像改为黑白色 原来的写法
  • 【数据结构】并查集

    文章目录 1 并查集原理 2 并查集的实现 2 1并查集框架 2 2insert 插入元素接口 2 3Findroot查找所属集合 2 4合并两个集合 2 5统计集合个数 3 测试 4 并查集OJ 4 1省份的数量 4 2等式方程的可满足性
  • Enterprise Architect 中文经典教程

    本文使用到的EA工程文件下载 一 Enterprise Architect简介 Enterprise Architect是一个对于软件系统开发有着极好支持的CASE软件 Computer Aided Software Engineering
  • python从键盘上输入一个字符、当输入的是英文字母时_从键盘输入一个字符 若该字符是英文字母是则输入对应的ASCII码...

    展开全部 ascill字母表 a z 97 122 A Z 65 90 0 9 48 57 代码如下 可以循环判断是字母的ascil 输入636f707962616964757a686964616f313333376261340退出 inc
  • 验证微信号的正则表达式

    var wxreg a zA Z 1 a zA Z0 9 5 19
  • vue项目使用视频播放器vue-video-player

    安装使用 插件有版本限制 如果项目使用的是vue2 0版本 请选择安装 4 x版本 否则会安装不成功 yarn add vue video palyer save 或者 npm install vue video palyer save 组
  • python里出现breakoutsideloop_Python ast.Break方法代码示例

    本文整理汇总了Python中ast Break方法的典型用法代码示例 如果您正苦于以下问题 Python ast Break方法的具体用法 Python ast Break怎么用 Python ast Break使用的例子 那么恭喜您 这里
  • Java对JSON路径解析JsonPath例子

    1 jsonpath的特点 不需要定义java bean 不用对多层map多次迭代 就可以获得json解析树中深层次的节点 Jayway的jsonpath解析需要把要解析的json一次加载进内存 2 1 jsonpath表达式的两种方式 t