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

jq使用..递归搜索多个键时如何为输出标注对应匹配键名

实现方法

不需要为每个目标键单独执行搜索,调整递归遍历的逻辑即可,核心是遍历递归到的所有对象的键值对,筛选目标键后直接组装需要的结构,jq脚本如下:

#!/usr/bin/jq -f

..
| objects
| to_entries[]
| select(.key == "keyA" or .key == "keyB")
| {key: .key, value: .value}

逻辑说明

  • .. 保持原有的递归遍历所有节点的逻辑
  • objects 过滤掉非对象类型的节点(数组、字符串、数字等类型没有键值对,直接跳过减少无效处理)
  • to_entries[] 把当前对象拆成{key: 键名, value: 值}格式的条目流
  • select(...) 筛选出键名匹配目标keyA、keyB的条目
  • 最后一步直接输出你需要的结构,不需要额外转换

如果后续需要新增匹配的键,直接在select条件里补充即可;如果匹配的键数量较多,可以把判断改成数组包含的形式,维护更方便:

select(.key as $currentKey | ["keyA", "keyB", "keyC"] | index($currentKey))

用你提供的示例JSON执行上述脚本,输出结果完全符合预期:

{"key":"keyA","value":{"foo":"foo","bar":"bar"}}
{"key":"keyB","value":{"A":"123","B":"c"}}

原写法无法携带键名的原因是:之前的逻辑是递归到节点后直接硬编码取.keyA?、.keyB?的值,值取出后就丢失了对应的键名上下文,自然无法直接组装带键名的结构。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:27:18