是否有任何方法可以根据 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
}
]
我一直在解析一个大 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
}
]