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

jq工具:如何仅保留匹配指定模式的键并原样输出输入JSON?

用jq提取匹配特定模式的键值对

没问题,要从你的JSON数组里提取所有键名以Sym开头的内容,用jq可以轻松搞定,我给你两种常用的实现方式,都很直观:

1. 基础用法:遍历并筛选每个对象

如果你想逐个输出每个对象中符合条件的键值对,可以用下面的命令:

jq '.[] | with_entries(select(.key | startswith("Sym")))'

各部分解释:

  • .[]:遍历输入数组中的每一个对象;
  • with_entries(...):把对象转换成{"key": "...", "value": "..."}的条目数组,处理完后再转回对象格式;
  • select(.key | startswith("Sym")):筛选出键名以Sym开头的条目(startswith比正则更直白,适合这种前缀匹配的场景)。

2. 保留数组结构

如果你希望输出结果还是一个完整的JSON数组(而不是一个个独立的对象),只需要把整个表达式包裹在数组括号里:

jq '[ .[] | with_entries(select(.key | startswith("Sym"))) ]'

示例演示

用你给出的输入片段:

[ 
  {"Name":"Widgets","Size":10,"SymUS":"Widg","SymCN":"Zyin","SymJP":"Kono"}, 
  {"Name":"Blodgets","Size":400,"SymUS":"Blodg","SymAU":"Blod","SymJP":"Kado"}, 
  {"Name":"Fonzes","Size":11,"SymRU":"Fyet"}
]

运行第一个命令会输出:

{"SymUS":"Widg","SymCN":"Zyin","SymJP":"Kono"}
{"SymUS":"Blodg","SymAU":"Blod","SymJP":"Kado"}
{"SymRU":"Fyet"}

运行第二个命令会输出:

[
  {"SymUS":"Widg","SymCN":"Zyin","SymJP":"Kono"},
  {"SymUS":"Blodg","SymAU":"Blod","SymJP":"Kado"},
  {"SymRU":"Fyet"}
]

可选:用正则匹配更复杂的模式

如果你的匹配需求更复杂(比如键名包含Sym但不一定在开头),可以用test函数结合正则表达式,比如筛选键名包含Sym的所有键:

jq '.[] | with_entries(select(.key | test("Sym")))'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:02:13