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