是否有任何方法可以基于jmespath中子对象中某个键的条件来访问父键?

时间:2019-08-20 03:57:45

标签: json jmespath

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

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

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

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

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

必需的输出是

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

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

1 个答案:

答案 0 :(得分:1)

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

您会得到这个:

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