本文主要记录
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; }