在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  # 标题
        }

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐