真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JSONPATHjson解析工具的使用

這篇文章主要介紹“JSONPATH json解析工具的使用”,在日常操作中,相信很多人在JSONPATH json解析工具的使用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”JSONPATH json解析工具的使用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、信豐ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的信豐網(wǎng)站制作公司

1、jsonPath的在github上的網(wǎng)址如下:https://github.com/json-path/JsonPath

2、json-path 快速入門(mén)

一、json-path中的操作符

JSONPATH json解析工具的使用

二、json-path中可以使用的函數(shù)

JSONPATH json解析工具的使用

三、過(guò)濾操作符

JSONPATH json解析工具的使用

3、maven依賴(lài)


	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工具類(lèi)
 * JsonPath表達(dá)式可以使用點(diǎn)表示法:$.store.book[0].title
 *                  或括號(hào)表示法:$['store']['book'][0]['title']
 *
 * real_param_response表path字段存儲(chǔ)格式仿點(diǎn)表示法,如store.book[1].isbn
 */
public class JsonPathUtil {

    //JsonPath中的“根成員對(duì)象”始終稱(chēng)為$,無(wú)論是對(duì)象還是數(shù)組
    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 // 抑制異常的拋出,當(dāng)設(shè)置了Option.ALWAYS_RETURN_LIST時(shí)返回[],否則返回null
        ).jsonProvider(new JsonSmartJsonProvider()).build();
    }

    /**
     * 解析類(lèi)
     * @param resJsonStr 待解析的返參對(duì)象
     * @param expectList 定義的預(yù)期結(jié)果集合
     * @return 結(jié)果集
     */
    public static Map parseJson(String resJsonStr, List expectList){
        /*1.此處預(yù)先解析json,默認(rèn)請(qǐng)情下JsonPath.read方法每掉一次都會(huì)重新解析json,此處預(yù)先解析好就不用每次都進(jìn)行解析*/
        DocumentContext context = JsonPath.parse(resJsonStr, configuration);

        //2.構(gòu)造返回結(jié)果
        Map resultMap = new HashMap<>();

        expectList.forEach(beanMap -> {
            String path = String.join(".", ROOT_PREFIX, (String)beanMap.get("path"));

            //beanMap.get("dataType") 數(shù)據(jù)類(lèi)型的作用弱化了
            Object val = context.read(path);
            resultMap.put((String)beanMap.get("code"), val);
        });

        return resultMap;
    }

    /**groovy腳本中可使用此定制開(kāi)發(fā)*/
    public static Map parsePathJson(String resJsonStr, List> pathList){
        /*1.此處預(yù)先解析json,默認(rèn)請(qǐng)情下JsonPath.read方法每掉一次都會(huì)重新解析json,此處預(yù)先解析好就不用每次都進(jìn)行解析*/
        DocumentContext context = JsonPath.parse(resJsonStr, configuration);

        //2.構(gòu)造返回結(jié)果
        Map resultMap = new HashMap<>();

        pathList.forEach(pathMap -> {
            String path = String.join(".", ROOT_PREFIX, pathMap.get("path"));

            //beanMap.get("dataType") 數(shù)據(jù)類(lèi)型的作用弱化了
            Object val = context.read(path);
            resultMap.put(pathMap.get("code"), val);
        });

        return resultMap;
    }

    /**
     * https://www.baeldung.com/guide-to-jayway-jsonpath
     * 官網(wǎng)地址,可查詢(xún)過(guò)濾器定義功能等
     */
    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、官網(wǎng)中說(shuō)明了 過(guò)濾器的具體使用規(guī)則,為具體研發(fā)提供了很大的自由度和幫助

    如testParse方法中Criteria的使用就是基于store.bicycle[?] 語(yǔ)義才可以繼續(xù)的。多一步少一步都不行

參考:

https://blog.csdn.net/fu_huo_1993/article/details/88350147     給出了jsonpath的地址和api簡(jiǎn)圖,非常好

https://www.baeldung.com/guide-to-jayway-jsonpath    給出了官網(wǎng)中對(duì)應(yīng)的定義   非常好

到此,關(guān)于“JSONPATH json解析工具的使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


分享標(biāo)題:JSONPATHjson解析工具的使用
分享路徑:http://weahome.cn/article/ggphgo.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部