我一直在解析一个大的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查询,而不是在程序端进行处理。
答案 0 :(得分:1)
使用以下代码:student[*].{name: keys(@)[0], rollno: *.roll | [0]} | @[?rollno > `10`]
您会得到这个:
[
{
"name": "rob",
"rollno": 12
},
{
"name": "mary",
"rollno": 21
}
]