jmespath 如何在字典中查找键值?
jmespath how do I find the key values in the dictionary?
我有一个示例 json 文件。我需要提取 downloadUrl
键的所有值:
{
"nodes": {
"children": [
{
"id": "",
"localizedName": "",
"name": "Documents",
"children": [
{
"id": "",
"localizedName": "Brochures",
"name": "Brochures",
"items": [
{
"title": "Brochure",
"downloadUrl": "/documents/brochure-en.pdf",
"fileType": "pdf",
"fileSize": "2.9 MB"
}
]
},
{
"id": "192194",
"localizedName": "",
"name": "Demonstrations",
"items": [
{
"title": "Safety Poster",
"downloadUrl": "safety-poster-en.pdf",
"fileType": "pdf",
"fileSize": "1.1 MB"
}
]
}
]
}
]
}
}
我正在尝试使用此查询执行此操作:
jmespath.search('nodes[*].downloadUrl', file)
但未显示值列表。
哪里出错了?
你需要做类似的事情。
.search(("nodes[*].children[*].items[*].downloadUrl"))
静态地,您的属性低于
nodes
children
[ ]
children
[ ]
items
[ ]
downloadUrl
因此,为您提供这些值的查询将是:
nodes.children[].children[].items[].downloadUrl
如果您想要更动态的东西(假设 属性 名称可以更改,但您会发现 downloadUrl
的级别不会,您可以使用此查询:
*.*[][].*[][].*[?downloadUrl][][].downloadUrl
但遗憾的是,目前 JMESPath 不支持在任意结构中进行查询,例如 you can do it in jq。
我有一个示例 json 文件。我需要提取 downloadUrl
键的所有值:
{
"nodes": {
"children": [
{
"id": "",
"localizedName": "",
"name": "Documents",
"children": [
{
"id": "",
"localizedName": "Brochures",
"name": "Brochures",
"items": [
{
"title": "Brochure",
"downloadUrl": "/documents/brochure-en.pdf",
"fileType": "pdf",
"fileSize": "2.9 MB"
}
]
},
{
"id": "192194",
"localizedName": "",
"name": "Demonstrations",
"items": [
{
"title": "Safety Poster",
"downloadUrl": "safety-poster-en.pdf",
"fileType": "pdf",
"fileSize": "1.1 MB"
}
]
}
]
}
]
}
}
我正在尝试使用此查询执行此操作:
jmespath.search('nodes[*].downloadUrl', file)
但未显示值列表。
哪里出错了?
你需要做类似的事情。
.search(("nodes[*].children[*].items[*].downloadUrl"))
静态地,您的属性低于
nodes
children
[ ]
children
[ ]
items
[ ]
downloadUrl
因此,为您提供这些值的查询将是:
nodes.children[].children[].items[].downloadUrl
如果您想要更动态的东西(假设 属性 名称可以更改,但您会发现 downloadUrl
的级别不会,您可以使用此查询:
*.*[][].*[][].*[?downloadUrl][][].downloadUrl
但遗憾的是,目前 JMESPath 不支持在任意结构中进行查询,例如 you can do it in jq。