如何遍历 json 数组并为更大的 json 填充中的每个项目找到匹配项?

How to loop through a json array and find a match for each item in bigger json fille?

例如,我有这个 json 文件:

[
  {
    "Name": "Bob",
    "Grade": "Pass"
  },
  { 
    "Name": "Alice",
    "Grade": "Fail"
  },
  {
    "Name": "Mallory",
    "Grade": "Fail"
  }
]

而这个数组["Bo", "Al"]

我如何遍历数组以仅检查那些学生的 json 文件并输出他们的{姓名,成绩}?

另请注意,我可以做一系列 select(test(.Name == "Bob")) 的管道,但我不能对其进行硬编码,因为数组是根据选择动态生成的。

如果您需要进一步的许可,请告诉我。

谢谢!

注意:编辑询问如何为子字符串执行此操作,例如“Bob”和“Alice”的“Bo”和“Al”。抱歉,我对 jq 高级主题真的很陌生。再次感谢!

采用轻微修改评论中链接问题的答案以适应OP

的use-case
jq -n --argjson names '["Bob", "Alice"]' '
(reduce $names[] as $name ({}; .[$name] = true)) as $set
    | inputs | map(select($set[.Name]))' json

reduce 函数基本上创建一个 hash-map 真值映射到输入名称数组的每个条目。稍后将贴图应用于每个输入对象。如果条件满足,打印想要的对象。

或者使用 any/2 函数

jq --argjson names '["Bob", "Alice"]' '
 map(select( .Name as $a | any( $names[]; . == $a) ))' json