您好,登錄后才能下訂單哦!
這篇文章主要介紹“JSONPATH json解析工具的使用”,在日常操作中,相信很多人在JSONPATH json解析工具的使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JSONPATH json解析工具的使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1、jsonPath的在github上的網址如下:https://github.com/json-path/JsonPath
2、json-path 快速入門
一、json-path中的操作符
二、json-path中可以使用的函數
三、過濾操作符
3、maven依賴
<dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.4.0</version> </dependency>
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<String, Object> parseJson(String resJsonStr, List<BeanMap> expectList){ /*1.此處預先解析json,默認請情下JsonPath.read方法每掉一次都會重新解析json,此處預先解析好就不用每次都進行解析*/ DocumentContext context = JsonPath.parse(resJsonStr, configuration); //2.構造返回結果 Map<String, Object> 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<String, Object> parsePathJson(String resJsonStr, List<Map<String, String>> pathList){ /*1.此處預先解析json,默認請情下JsonPath.read方法每掉一次都會重新解析json,此處預先解析好就不用每次都進行解析*/ DocumentContext context = JsonPath.parse(resJsonStr, configuration); //2.構造返回結果 Map<String, Object> 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<BeanMap> 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<TemplateDO> 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<BeanMap> expectList = responseDOS.stream().map(BeanMap::create).collect(Collectors.toList()); String respJson = getRespJson(); /*Map<String, Object> 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解析工具的使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。