jmespath - Jmespath 动态设置 jmespath expr
问题描述
我正在使用 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",
},
]
}
并将 jmespath expr 动态设置为:
report= 'SalesMarketing3'
jmespath.search(f"'value[?name == {report}]'", data)
我没有得到与“SalesMarketing3”对应的字典,而是得到如下输出,我错过了什么吗?
'价值[?name == SalesMarketing3]'
非常感谢任何帮助。
解决方案
您的问题来自您必须搜索字符串或原始字符串文字 SalesMarketing3
这一事实。
在 JMESPath 中:
- 字符串由单引号分隔:
'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))
这给出了预期的输出:
[
{
"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"
}
]
推荐阅读
- r - 如何在R中的heatmap.2中加粗一组标签或分支
- node.js - MEAN 堆栈 http.post 请求正文为空
- angular - Angular中的粗箭头运算符之后的赋值运算符有什么用?
- java - 将 QuickAccess TextField 添加到 Eclipse RCP 应用程序
- java - 这个问题中增量和加法之间的区别?
- selenium - Selenium 停止使用错误消息:无法找到元素:{“method”:“xpath”,“selector”:“//span[contains(text(), 'Allow')]”}
- android - 查找电子邮件和/或用户名是否存在于 Firebase - Android
- css - css - 损坏文本的样式元素(空白:正常)
- discord.py - Discord.py 如何检查任务是否处于活动状态?
- mongodb - 当 collection_filters 设置为将当天的数据从 DocumentDB/MongoDB 同步到文件/ElasticSearch 时,Compose Transporter 抛出错误