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

标签 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
}

我目前无法选择通过程序内处理此问题,因为软件设计要求我编写 native jmespath 查询,而不是在程序端处理它。

最佳答案

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

你会得到这个:

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

关于json - 是否有任何方法可以根据 jmespath 中子对象中的键的条件来访问父键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57566523/

相关文章:

amazon-web-services - 当这些属性处于同一级别时,aws cli 查询多个属性

jsonpath - 根据子键过滤 JSON 对象

amazon-web-services - 列出缺少特定标签的卷

java - libgdx - 将自定义类解析为数组的 json

android - 使用 Retrofit 将动态 JSON 解析为 POJO

android - 确保 URL 是否提供 JSON

python - key 可能不存在的 JMESPath 路径

javascript - 为什么嵌套 for 循环会得到奇怪的结果?

javascript - 如何通过键引用从 JSON 对象中删除元素?

python - 如果值存在,如何让 jmespath 过滤器返回 true,如果不存在,则返回 false(python)