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

如何将多段jq命令合并为单条实现单次JSON数据遍历?

问题

我现在用两段jq命令从JSON文件提取数据,需要多次遍历输入的JSON,想把它们合并成单条命令实现仅遍历一次:

第一段命令:提取匹配条件的第一个结果(无匹配时输出错误),命令如下:

.[] | select(.[1] | objects."/Type".N == "/Catalog") | .[1]."/Dests"

假设这段命令输出为16876,第二段命令用这个结果进一步提取数据:

.[] | select(.[0] == 16876) | .[1] | to_entries[] | [.key, .value[0], .value[2].F, .value[3].F] | @tsv
解决方案

可以通过变量缓存中间结果,结合first函数和错误处理,实现单次遍历完成所有操作:

first(.[] | select(.[1] | objects."/Type".N == "/Catalog")) as $catalog
| if $catalog then $catalog[1]."/Dests" as $dests
  else error("未找到匹配/Catalog的项") end
| .[] | select(.[0] == $dests) | .[1] | to_entries[]
| [.key, .value[0], .value[2].F, .value[3].F] | @tsv

核心逻辑:

  • first(...)直接抓取第一个符合/Catalog条件的项,避免重复筛选
  • 用if...else分支处理无匹配的情况,直接抛出错误提示
  • 将提取到的目标ID$dests存入变量,在同一次遍历流程中完成后续的筛选和数据格式化,无需重复读取输入JSON

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:45:30