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

时间:2019-03-28 15:20:13

标签: 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"
      }
   ]
}

1 个答案:

答案 0 :(得分:0)

快速解答(TL; DR)

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

详细答案

上下文

  • JMESPath v 0.9.4

场景:

  • DeveloperSOHugoFerreira希望使用JSON一部分的交叉引用来查询JSON数据,以便在JSON的另一部分上动态填充JMESPath查询

问题

  • 不幸的是,此特定问题的目标是使用标准JMESPath 不可行,因为JMESPath在current-node上下文中缺少引用JSON数据根的令牌

另请参见