JSONPATH处理json

本文主要记录

 PredicateContext  和 Filter的用法  其中 
 PredicateContext 是用来删除替换。 Filter是用来过滤,具体用法参考文中代码

入门请参照:http://www.ibloger.net/article/2329.html

项目中有一串json如下

{
  "msg":"success",
  "paginationFlrs":"[[2141,2142]]",
  "floorList":[
    {
      "template":"gonggao",
      "backgroundColor":"#ffffff",
      "annConfig":{
        "showTag":"1",
        "pictureUrl":"//m.360buyimg.com/babel/jfs/t16324/112/2365900951/4786/e8c70b4/5aab38d6N2b46b43e.jpg!q70.jpg",
        "showMore":"1",
        "expoSrv":"2142_0-0-YU0000008007-M#2-0#2-2#bingo_null",
        "jump":{
          "des":"m",
          "srv":"00011857_2142_YU0000008007_0-0-2_0-0-YU0000008007-M#2-0#2-2#bingo",
          "params":{
            "innerLink":"",
            "url":"//www.jd.com"
          }
        }
      },
      "ofn":"2",
      "adsList":[
        Object{...},
        Object{...},
        {
          "picWidth":0,
          "extension_id":"",
          "picHeight":0,
          "pictureUrl":"",
          "link":"1000015268",
          "progId":"",
          "materialId":"2400016804",
          "content":"广告说明333",
          "advertId":"2400016804",
          "name":"三只松鼠京东自营旗舰店",
          "linkType":"3",
          "sortNum":3,
          "desc":"广告说明333",
          "jump":{
            "des":"newgoodshop",
            "srv":"00011857_2142_00014028_2400016804_3_2_0_0_2_0-0-2_00014028-00218324-2400016804-N#0-2-3--45--#1-0-#1-#yhd",
            "params":{
              "shopId":"1000015268",
              "clickUrl":""
            }
          },
          "expoSrv":"2142_00014028-00218324-2400016804-N#0-2-3--45--#1-0-#1-#yhd_2"
        },
        {
          "picWidth":531,
          "extension_id":"",
          "picHeight":240,
          "pictureUrl":"//m.360buyimg.com/babel/s509x230_jfs/t18658/296/1518342736/22452/7a7f78e1/5acdbfe7Nf96760db.jpg!q70.jpg",
          "link":"//mall.jd.com/index-1000015268.html",
          "progId":"",
          "materialId":"2400016805",
          "content":"广告说明444",
          "advertId":"2400016805",
          "name":"adsfasdf",
          "linkType":"6",
          "sortNum":4,
          "desc":"广告说明444",
          "jump":{
            "des":"babelfloor",
            "srv":"00011857_2142_00014028_2400016805_4_2_0_0_2_0-0-2_00014028-00218324-2400016805-N#0-2-6--45--#1-0-#1-#yhd",
            "params":{
              "floor":"//mall.jd.com/index-1000015268.html",
              "clickUrl":""
            }
          },
          "expoSrv":"2142_00014028-00218324-2400016805-N#0-2-6--45--#1-0-#1-#yhd_2"
        },
        {
          "picWidth":120,
          "extension_id":"",
          "picHeight":120,
          "pictureUrl":"//m.360buyimg.com/babel/s115x115_jfs/t18679/301/1529160602/3767/6ccac405/5acdbff3N222dc5bb.jpg!q70.jpg",
          "link":"//mall.jd.com/index-1000015268.html",
          "progId":"",
          "materialId":"2400016806",
          "content":"广告说明555",
          "advertId":"2400016806",
          "name":"asdfas",
          "linkType":"1",
          "sortNum":5,
          "desc":"广告说明555",
          "jump":{
            "des":"m",
            "srv":"00011857_2142_00014028_2400016806_5_2_0_0_2_0-0-2_00014028-00218324-2400016806-M#0-2-1--45--#1-0-#1-#yhd",
            "params":{
              "innerLink":"",
              "url":"//mall.jd.com/index-1000015268.html",
              "clickUrl":""
            }
          },
          "expoSrv":"2142_00014028-00218324-2400016806-M#0-2-1--45--#1-0-#1-#yhd_2"
        }
      ],
      "sameColor":"0",
      "moduleId":2142,
      "floorNum":"1",
      "yhd_available":"true"
    }
  ],
  "item":"0",
  "backgroundColor":"",
  "code":"0",
  "paginationParams":[
    "1"
  ],
  "pagination":true,
  "asyncInterfaceBack":{
    "templatePlatform":"3"
  },
  "pageId":"92152",
  "visReState":{
    "matGrpN":2,
    "matReN":1
  },
  "head":{
    "template":"page_setup",
    "headSourceId":"",
    "isHeadCusCode":"0",
    "pageBgPicStyle":"0",
    "footSourceId":"",
    "pageBgColor":"#FFFFFF",
    "isFootCusCode":"0",
    "pageBgPicUrl":"",
    "pageName":"京东(JD.COM)-正品低价、品质保证、配送及时、轻松购物!",
    "benefit":null,
    "name":null
  },
  "activityId":"00011857",
  "returnMsg":"success",
  "hasPerData":"0",
  "encodeActivityId":"2RxsenZAdASTG6vrpRebEEUiVzN7",
  "subCode":"0",
  "useDiscovery":"",
  "transParam":"{"bsessionId":"cba68429-c631-4d45-a5c9-b9c27e93f8b2","babelChannel":"","actId":"00011857","enActId":"2RxsenZAdASTG6vrpRebEEUiVzN7","pageId":"92152"}",
  "floatLayer":{

  },
  "biimpr":"00011857_92152"
}

要对其中的key按条件删除过滤以及替换处理。处理如下。其中 

 
 
protected Map<String, Object> handleElements(final Map<String, Object> floor) {
   if (floor == null) {
      return floor;
   }
   Object templateObject = JsonPath.read(floor,"$.template");
   if (templateObject == null) {
      return floor;
   }
   String template = (String) templateObject;
   if (isValidTemplate(template)) {
      //保留链接类型为无、链接、商祥、商家、搜索五种类型,无类型没有"jump.des"字段,其余对应字段分别为"skudetail", "newgoodshop", "productList",对于productList类型,过滤search,category子类型
      parse(floor).delete("$.adsList[?]", filter(where("jump.des").exists(true)).and(where("jump.des").nin("m", "skudetail", "newgoodshop", "productList")));
      //处理“更多”得链接。
      parse(floor).delete("$.annConfig.jump.params[?]", new Predicate() {
         @Override
         public boolean apply(PredicateContext ctx) {
            Map<String, String> item = ctx.item(Map.class);
            String url = parse(item).read("$.url", String.class);
            String YHDUrl = handlePcLink(url);
            if (YHDUrl.equals("")) {//匹配不上链接直接删除。
               return true;
            } else {//匹配上了  替换链接
               parse(floor).set("$.annConfig.jump.params.url", YHDUrl);
               return false;
            }
         }
      });
      //处理 des=m 的链接
      parse(floor).delete("$.adsList[?]", new Predicate() {
         int index = -1;
         @Override
         public boolean apply(PredicateContext ctx) {
            index++;
            Map<String, String> item = ctx.item(Map.class);
            String des = parse(item).read("$.jump.des", String.class);
            if (des == null || !des.equals("m")) {
               return false;
            } else {
               String url = parse(item).read("$.jump.params.url", String.class);
               String YHDUrl = handlePcLink(url);
               if (YHDUrl.equals("")) {//匹配不上链接直接删除。
                  return true;
               } else {//匹配上了  替换链接
                  parse(floor).set("$.adsList["+index+"].jump.params.url", YHDUrl);
                  return false;
               }
            }
         }
      });

   }
   return floor;
}

猜你喜欢

转载自blog.csdn.net/u010800970/article/details/79900389