我有一个JSON文件,我正在使用jq从中提取数据。一个简单的用例是提取包含ID作为参数提供的任何JSON对象。
我使用以下简单脚本执行此操作:
[.[] | select(.id == $ID)]
脚本存储在单独的文件(by_id.jq
)中,我使用-f
参数将其传递进来。
完整的命令如下所示:
cat ./my_json_file.json | jq -sf --arg ID "8df993c1-57d5-46b3-a8a3-d95066934e5b" ./by_id.jq
有没有一种方法可以仅使用jq来将逗号分隔的值列表作为参数传递给jq脚本,并遍历id并将它们与.id
JSON文件中的value进行比较,结果是对象具有该身份证?
例如,如果我想通过它们的ID提取三个对象,则需要以这种方式构造命令:
cat ./my_json_file.json | jq -sf --arg ID "8df993c1-57d5-46b3-a8a3-d95066934e5b,1d5441ca-5758-474d-a9fc-40d0f68aa538,23cc618a-8ad4-4141-bc1c-0251y0663963" ./by_id.jq
当然。尽管您需要将ID列表解析(拆分)为jq可以使用的对象,例如ID数组。然后,给定键数组,您的问题就变成了选择具有任何这些ID的对象。您可以使用这里找到的方法。
$ jq --arg ID '8df993c1-57d5-46b3-a8a3-d95066934e5b,1d5441ca-5758-474d-a9fc-40d0f68aa538,23cc618a-8ad4-4141-bc1c-0251y0663963' '
select(.id | IN($ID|split(",")[]))
' ./my_json_file.json
我不确定您的输入是什么样子,但是通过使用slurping然后过滤已过滤的输入来判断,它是一个对象流。在这里没有吃草的感觉。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句