jq 1.5条件筛选JSON数组脚本能否简化及优化咨询
jq 1.5 嵌套对象筛选与脚本简化方案
问题根源
你使用from_entries报错的原因是:原.data是数组,to_entries会将数组转换为以数字索引为key的键值对列表,但jq 1.5不允许数字作为对象键,直接调用from_entries就会触发"Cannot use number as object key"的错误。
最优简化脚本
方案一:直接修改原字段(最简洁高效)
无需额外转换,直接对.data数组做筛选并保留原结构:
.data |= map(select(.age > 9))
逻辑说明:
|=操作符直接修改原JSON中的.data字段map(select(.age > 9))筛选出年龄≥10的元素(>9等价于≥10)- 自动保留原数据结构,无需手动重新包装
{data: .}
方案二:链式重组结构
如果偏好链式写法,可直接筛选后重组:
{data: .data | map(select(.age > 9))}
这个版本比你原来的脚本省去了to_entries和后续拆包步骤,逻辑更直接。
原脚本的冗余点说明
你原来的脚本.data | to_entries | map(select(.value.age>9)) | [.[].value] | {data: .}做了多余的转换:
to_entries把数组转成键值对列表完全没必要- 最后通过
[.[].value]拆包再包装{data: .},不如直接对数组筛选后重组
内容的提问来源于stack exchange,提问作者HuggieRich
相关产品推荐
相关产品推荐

