json - jq 可以检查逗号分隔的值数组的每个元素以检查该值是否存在于 JSON 中?
问题描述
我有一个 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 文件中的值检查它们,结果是具有的对象那个身份证?
例如,如果我想通过它们的 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 然后过滤 slurped 输入来判断,它是一个对象流。这里不需要啜饮。
推荐阅读
- c# - 使用 LINQ 从数据表中的序列中选择最大值和最小值
- ajax - 如何在 Laravel 中使用 Ajax 单击时验证模态表单
- javascript - 如何使用 javascript 验证 html 代码?
- sqlplus - 如何在 D 盘中打开包含 SQL Plus 中的插入语句的文本文件
- python - Keras 中的损失函数与类比函数不匹配
- c++ - 如何清除arduino输出串行窗口中的垃圾字符?我需要使用软件串口发送和接收字符
- firebase - Flutter Firestore 数据返回 null
- java - 如何为给 Json 创建模态类
- c# - 为什么发现与请求匹配的多个操作时抛出异常
- testng - 如何从 Chrome 开发者工具访问 XML SAML 选项卡?