You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jq根据键值对过滤JSON对象并保留原外层键名

解决方案

你可以通过to_entries和from_entries组合的方式保留外层键,具体写法如下:

echo '{"A": {"x": 1}, "B": {"x":2}, "C":{"x":3}}' | jq 'to_entries | map(select(.value.x == 2)) | from_entries'

逻辑说明

  • to_entries会将原JSON对象转换为键值对数组,每个元素的结构为{"key": "外层键名", "value": "键对应的值"},完整保留外层键和对应内容
  • map(select(.value.x == 2))遍历键值对数组,筛选出值中x等于2的条目
  • from_entries将筛选后的键值对数组转换回普通JSON对象,最终输出保留原外层键的结果

如果你的jq版本在1.5及以上,还可以用更简洁的with_entries语法,等效于上面的写法:

echo '{"A": {"x": 1}, "B": {"x":2}, "C":{"x":3}}' | jq 'with_entries(select(.value.x == 2))'

两种写法的运行结果都符合你的预期:

{
  "B": {
    "x": 2
  }
}

内容的提问来源于stack exchange,提问作者lionel319

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:42:04