Jmespath动态设置jmespath expr

Pra*_*yan 1 jmespath

我使用 jmespath 如下

data = {
    "value": [
        {
            "datasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
            "id": "5b218778-e7a5-4d73-8187-f10824047715",
            "name": "SalesMarketing2",
            "webUrl": "https://app.powerbi.com/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/reports/5b218778-e7a5-4d73-8187-f10824047715",
            "embedUrl": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715&groupId=f089354e-8366-4e18-aea3-4cb4a3a50b48",
        },
        {
            "datasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
            "id": "5b218778-e7a5-4d73-8187-f10824047715",
            "name": "SalesMarketing3",
            "webUrl": "https://app.powerbi.com/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/reports/5b218778-e7a5-4d73-8187-f10824047715",
            "embedUrl": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715&groupId=f089354e-8366-4e18-aea3-4cb4a3a50b48",
        },
    ]
}
Run Code Online (Sandbox Code Playgroud)

并将 jmespath expr 动态设置为:

report= 'SalesMarketing3'
Run Code Online (Sandbox Code Playgroud)
jmespath.search(f"'value[?name == {report}]'", data)
Run Code Online (Sandbox Code Playgroud)

我没有得到与“SalesMarketing3”对应的字典,而是得到如下输出,我错过了什么吗?

'值[?名称== SalesMarketing3]'

非常感谢任何帮助。

β.ε*_*.βε 5

您的问题来自于您必须搜索字符串原始字符串文字 SalesMarketing3
在 JMES 路径中:

  • 字符串由单引号分隔:'SalesMarketing3'
  • 原始字符串文字由反引号分隔:`SalesMarketing3`

给定example.py

import jmespath

data = {
    "value": [
        {
            "datasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
            "id": "5b218778-e7a5-4d73-8187-f10824047715",
            "name": "SalesMarketing2",
            "webUrl": "https://app.powerbi.com/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/reports/5b218778-e7a5-4d73-8187-f10824047715",
            "embedUrl": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715&groupId=f089354e-8366-4e18-aea3-4cb4a3a50b48",
        },
        {
            "datasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
            "id": "5b218778-e7a5-4d73-8187-f10824047715",
            "name": "SalesMarketing3",
            "webUrl": "https://app.powerbi.com/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/reports/5b218778-e7a5-4d73-8187-f10824047715",
            "embedUrl": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715&groupId=f089354e-8366-4e18-aea3-4cb4a3a50b48",
        },
    ]
}
report = 'SalesMarketing3'

print(jmespath.search(f"value[?name == `{report}`]", data))
## Another equivalent is:
# print(jmespath.search(f"value[?name == '{report}']", data))
Run Code Online (Sandbox Code Playgroud)

这给出了预期的输出:

[
  {
    "datasetId": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
    "id": "5b218778-e7a5-4d73-8187-f10824047715",
    "name": "SalesMarketing3",
    "webUrl": "https://app.powerbi.com/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/reports/5b218778-e7a5-4d73-8187-f10824047715",
    "embedUrl": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715&groupId=f089354e-8366-4e18-aea3-4cb4a3a50b48"
  }
]
Run Code Online (Sandbox Code Playgroud)