json - 如何根据属性值是否在数组中使用 jq 过滤 JSON?
问题描述
我有一些 JSON 需要根据数组中是否存在某些属性值进行过滤。
我有一些有用的东西,但如果感觉像一个杂物。有没有更简洁的方法来做到这一点?
输入
{"potato":4}
筛选
select(.potato as $k | ([1,2,3,4] | any(. == $k)))
输出
{
"potato": 4
}
jqplay 链接 https://jqplay.org/s/Ts97jkk21K
解决方案
这似乎不那么杂乱无章了吗?
[1,2,3,4] as $acceptable
| .potato as $k
| select( any($acceptable[]; . == $k) )
如果你的 jq 有IN/1
,你可以跳过$k
:
[1,2,3,4] as $acceptable
| select(.potato | IN($acceptable[]))
例如,这种样式可以很容易地$acceptable
作为命令行参数传入。
诱惑
仅选择解决方案的简单性很容易被诱惑,例如:
[1,2,3,4] as $acceptable
| select($acceptable[] == .potato)
这在某些情况下会很好,例如 if$acceptable
很短并且不包含重复项(假设我们想要 的语义any
)。但是any
并且IN
具有可能需要的短路语义,例如为了效率。
推荐阅读
- javascript - Javascript:数组、For循环和函数
- css - 垂直对齐项目列表
- asp.net - 添加实体时加载相关数据 - Entity Framework Core 2
- scala - Spark:窗口函数是否可以替代自定义分区器?
- java - RDS 到 S3 - 数据转换 AWS
- vue.js - vue组件方法通过变量改变数据
- node.js - 快速车把呈现为字符串而不是响应
- javascript - 使用 AJAX 向 API 发送参数
- firebase - Firebase 实时数据库提供了不正确的服务器时间偏移值
- php - 为什么我单击表格中的行它在下一页中什么也不显示?