是否有任何方法可以根据 jmespath 中子对象中键的条件访问父键?

Is there any method by which a parent key can be accessed based on a condition on a key in the child object in jmespath?

我一直在解析一个大 json 文件。我无法使用 jq,因为它已经在我们的系统中进行了测试,在我们的系统中完成解析需要相对较长的时间。我们一直在使用 Jmespath,因为它已经通过我们使用的 json 进行了很好的测试。下面给出的示例 json :-

{
  "student": [
    {
      "rob": {
        "roll": 12
      }
    },
    {
      "tom": {
        "roll": 9
      }
    },
    {
      "mary": {
        "roll": 21
      }
    }
  ]
}

问题是,我必须获取所有学生的姓名以及 roll 大于 10 的学生。

我最初在 jq 上工作,下面的语法是我在 JMESPath 中寻找的。

".student | .[] | select(.[].roll>=10) | { name : keys[], rollno : .[].roll}"

要求的输出是

{
  "name": "rob",
  "rollno": 12
}
{
  "name": "mary",
  "rollno": 21
}

我目前没有选择通过程序内部处理这个问题,因为软件设计要求我编写本机 jmespath 查询而不是在程序端处理它。

使用此代码:student[*].{name: keys(@)[0], rollno: *.roll | [0]} | @[?rollno > `10`]

你会得到这个:

[
  {
    "name": "rob",
    "rollno": 12
  },
  {
    "name": "mary",
    "rollno": 21
  }
]