使用 JMESPATH 过滤具有 json 值的对象列表

Hug*_*ira 5 jmespath

我有一个 JSON,我需要使用 JMESPATH 选择人员角色的值。我可以只使用一个静态 id 来完成此操作,例如roles[?id=='1324'],但我无法使用从 JSON 中选择的角色 id 列表。我尝试使用:roles[?id==person[ * ].role[ * ].id[ ]]并使用管道来做到这一点,但没有任何结果。下面是我的 JSON 示例。

{
   "person":[
      {
         "id":"999999999",
         "role":[
            {
               "id":"1324",
               "name":"Test"
            },
            {
               "id":"1578",
               "name":"Test 2"
            }
         ]
      },
      {
         "id":"888888888",
         "role":[
            {
               "id":"1234",
               "name":"Test"
            },
            {
               "id":"1678",
               "name":"Test 2"
            }
         ]
      }
   ],
   "roles":[
      {
         "id":"1234",
         "value":"$945.00"
      },
      {
         "id":"1324",
         "value":"$1245.00"
      },
      {
         "id":"1578",
         "value":"$3245.00"
      },
      {
         "id":"1678",
         "value":"$4245.00"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

dre*_*mac 2

快速回答(TL;DR)

  • 通常使用 JMESPath 轻松轻松地查询 JSON 是很容易的
    • 一个轻松的关键是利用专门规范化的 JSON 结构,以实现 JMESPath 的最佳使用
    • 一个轻松的关键是知道何时在 JSON 中使用字典(又名对象 // 关联数组 // 映射)名称-值对,以使 JSON 的所有部分都能够明确引用
  • 不幸的是,这个特定问题的目标无法使用标准 JMESPath 实现,因为 JMESPath 缺少一个令牌来引用上下文中的 JSON 数据current-node
  • 要完成此任务,您必须突破 JMESPath 并使用托管语言的功能

详细解答

语境

  • JMESPath v 0.9.4

设想:

  • 开发人员SOHugoFerreira 希望使用 JSON 一部分的交叉引用来查询 JSON 数据,以动态填充 JSON 另一部分的 JMESPath 查询

问题

  • 不幸的是,这个特定问题的目标无法使用标准 JMESPath 实现,因为 JMESPath 缺少一个令牌来引用上下文中的 JSON 数据current-node

也可以看看