问题描述
[
{
"Name": "Bob","Grade": "Pass"
},{
"Name": "Alice","Grade": "Fail"
},{
"Name": "Mallory","Grade": "Fail"
}
]
这个数组["Bo","Al"]
我如何遍历数组以仅检查那些学生的json文件并输出其{姓名,年级}?
另外请注意,我可以执行一系列select(test(.Name == "Bob"))
的管道,但是由于根据选择动态生成数组,因此我无法对其进行硬编码。
让我知道您是否需要进一步的许可。
谢谢!
注意:编辑后询问如何对子字符串执行此操作,例如对于“鲍勃”和“爱丽丝”来说是“ Bo”和“ Al”。抱歉,对于jq高级主题我真的很陌生。再次谢谢你!
解决方法
在链接中的问题中采用对 slight 进行修改的注释,以适应OP的用例
jq -n --argjson names '["Bob","Alice"]' '
(reduce $names[] as $name ({}; .[$name] = true)) as $set
| inputs | map(select($set[.Name]))' json
reduce
函数基本上会为输入名称数组的每个条目创建一个真值哈希映射。稍后将地图应用于每个输入对象。如果条件满足,请打印所需的对象。
或者使用any/2
函数
jq --argjson names '["Bob","Alice"]' '
map(select( .Name as $a | any( $names[]; . == $a) ))' json