千家信息网

JSONPATH json解析工具的使用

发表于:2024-10-06 作者:千家信息网编辑
千家信息网最后更新 2024年10月06日,这篇文章主要介绍"JSONPATH json解析工具的使用",在日常操作中,相信很多人在JSONPATH json解析工具的使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2024年10月06日JSONPATH json解析工具的使用

这篇文章主要介绍"JSONPATH json解析工具的使用",在日常操作中,相信很多人在JSONPATH json解析工具的使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JSONPATH json解析工具的使用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1、jsonPath的在github上的网址如下:https://github.com/json-path/JsonPath

2、json-path 快速入门

一、json-path中的操作符

二、json-path中可以使用的函数

三、过滤操作符

3、maven依赖

        com.jayway.jsonpath        json-path        2.4.0

4、util 代码

package com.ysma.ppt.util.resource;import com.jayway.jsonpath.*;import com.jayway.jsonpath.spi.json.JsonSmartJsonProvider;import com.ysma.ppt.intf.pojo.TemplateDO;import org.springframework.cglib.beans.BeanMap;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.stream.Collectors;/** * @author ysma 2019-09-25 * JsonPath工具类 * JsonPath表达式可以使用点表示法:$.store.book[0].title *                  或括号表示法:$['store']['book'][0]['title'] * * real_param_response表path字段存储格式仿点表示法,如store.book[1].isbn */public class JsonPathUtil {    //JsonPath中的"根成员对象"始终称为$,无论是对象还是数组    private static final String ROOT_PREFIX = "$";    private static Configuration configuration;    static {        configuration = Configuration.builder().options(                Option.DEFAULT_PATH_LEAF_TO_NULL, // 如果路径不存在则返回null,而不要抛出PathNotFoundException                Option.SUPPRESS_EXCEPTIONS // 抑制异常的抛出,当设置了Option.ALWAYS_RETURN_LIST时返回[],否则返回null        ).jsonProvider(new JsonSmartJsonProvider()).build();    }    /**     * 解析类     * @param resJsonStr 待解析的返参对象     * @param expectList 定义的预期结果集合     * @return 结果集     */    public static Map parseJson(String resJsonStr, List expectList){        /*1.此处预先解析json,默认请情下JsonPath.read方法每掉一次都会重新解析json,此处预先解析好就不用每次都进行解析*/        DocumentContext context = JsonPath.parse(resJsonStr, configuration);        //2.构造返回结果        Map resultMap = new HashMap<>();        expectList.forEach(beanMap -> {            String path = String.join(".", ROOT_PREFIX, (String)beanMap.get("path"));            //beanMap.get("dataType") 数据类型的作用弱化了            Object val = context.read(path);            resultMap.put((String)beanMap.get("code"), val);        });        return resultMap;    }    /**groovy脚本中可使用此定制开发*/    public static Map parsePathJson(String resJsonStr, List> pathList){        /*1.此处预先解析json,默认请情下JsonPath.read方法每掉一次都会重新解析json,此处预先解析好就不用每次都进行解析*/        DocumentContext context = JsonPath.parse(resJsonStr, configuration);        //2.构造返回结果        Map resultMap = new HashMap<>();        pathList.forEach(pathMap -> {            String path = String.join(".", ROOT_PREFIX, pathMap.get("path"));            //beanMap.get("dataType") 数据类型的作用弱化了            Object val = context.read(path);            resultMap.put(pathMap.get("code"), val);        });        return resultMap;    }    /**     * https://www.baeldung.com/guide-to-jayway-jsonpath     * 官网地址,可查询过滤器定义功能等     */    private static void testParse(String resJsonStr, List expectList){        Object obj = configuration.jsonProvider().parse(resJsonStr);        expectList.forEach(beanMap -> {            String path = String.join(".", ROOT_PREFIX, (String)beanMap.get("path"));            Object read = JsonPath.read(obj, path, Filter.filter(Criteria.where("price").lt(5.5)));            System.out.println("read:"+read);        });    }    public static void main(String[] args) {        List responseDOS = new ArrayList<>();        TemplateDO rd = new TemplateDO();        rd.setCode("color");        rd.setPath("store.bicycle[?]");        rd.setDataType("double");        responseDOS.add(rd);        /*ParamResponseRealDO rd2 = new ParamResponseRealDO();        rd2.setCode("category");        rd2.setPath("hehe.store.book[*].category");        rd2.setDataType("array");        responseDOS.add(rd2);*/        List expectList = responseDOS.stream().map(BeanMap::create).collect(Collectors.toList());        String respJson = getRespJson();        /*Map resultMap = parseJson(respJson, expectList);        System.out.println(JSON.toJSONString(resultMap));*/        testParse(respJson, expectList);    }    private static String getRespJson(){        return  "{ \"store\": {\n">

5、官网中说明了 过滤器的具体使用规则,为具体研发提供了很大的自由度和帮助

如testParse方法中Criteria的使用就是基于store.bicycle[?] 语义才可以继续的。多一步少一步都不行

参考:

https://blog.csdn.net/fu_huo_1993/article/details/88350147 给出了jsonpath的地址和api简图,非常好

https://www.baeldung.com/guide-to-jayway-jsonpath 给出了官网中对应的定义 非常好

到此,关于"JSONPATH json解析工具的使用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

工具 方法 结果 学习 对象 表示法 帮助 不用 作用 地址 操作符 数据 更多 类型 过滤器 不行 实用 很大 自由 接下来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 图书馆数据库系统的改进地方 软件开发工程师工作要保密吗 无锡建设智慧工地软件开发 TTS下载软件开发 医疗器械硬软件开发设计定制 湖北戴尔服务器虚拟化设计服务器 武林外传数据库配置 连接数据库字符串 上海戴尔服务器怎么样 飞蓝机房服务器管理系统 华望云服务器满员啥意思 迁安媒体网络技术答疑解惑 杭州软件开发公司那个好 python连接远程数据库 数据库ringbuffer 服务器的一个硬盘亮黄灯 mac个人电脑搭建服务器 全市网络安全专项检查填报系统 温哥华天气预报软件开发 部队网络安全研究 什么是未连接到服务器 网络安全入侵攻击的三个阶段 转回原服务器能带多少多少 uu加速器连接服务器失败 支付宝网络技术客户备付金 滨州市软件开发制作公司 一个数据库10万张表可以吗 北京软件开发人员数 数据库故障预警 西安飞创软件开发有限公司
0