在JsonPath中创建表达式之前,您必须了解两个重要的符号。
?:问号,标记表达式的开头。使用的语法[?(表达)]
[? (Expression)]
@: 在符号处表示正在处理的当前节点。语法使用$.books[?(@.price > 100)
3、多条件时
$.data[?(@.attribute ==1&&@.productKind==2)].productId
先过滤再取值
result = jsonpath.jsonpath(r, "$..[?(@.compareDataCode != None)..compareDataCode]") print(result)
过滤表达式
"$..[?(@.compareChannelName != None)..compareChannelName]"
'$.data.0.priceConfigList[?(@.description == "安卓价")].price'
f"$..[?(@.id == '{id}')].code" # 引用的id是字符串格式,需要在大括号外加个引号
jsonpath.jsonpath(res, f"$..[?(@.containRoute == True && @.containThreeD == True && @.groupKey == \"{groupKey}\")..sessionIds]")
{
"data": {
"itemList": [
{
"icon": "http:0f9ccf9934984e369659068b145b91bc.png",
"kemu": "1",
"title": "科一速成修改"
},
{
"icon": "http:659cf1de1f93418894bc8dd0208fc804.png",
"kemu": "4",
"title": "科四速成^_^"
}
]
},
"errorCode": 0,
"message": null,
"success": true
}
提取节点kemu 符合要求下的icon或title,icon或title可以放在表达式中扩号里面或外面,没有影响
expect = {
f"$..[?(@.kemu == '{kemu}')].icon": icon, # 车型
f"$..[?(@.kemu == '{kemu}')].kemu": kemu, # 科目
f"$..[?(@.kemu == '{kemu}').title]": title # 标题
}