使用jq排除指定分组(如group_3)并按指定格式输出数据的方法
jq处理JSON提取指定数据解决方案
你可以直接使用以下jq命令完成需求:
jq -r '.groups | to_entries[] | select(.key != "group_3") | .key as $group | .value | to_entries[] | "name: \(.key), group: \($group), field_A_value: \(.value | to_entries[0].value), field_B_value: \(.value | to_entries[1].value)"' 你的输入文件路径
命令逻辑说明
- 首先
.groups定位到JSON根节点下的groups对象 to_entries[]将groups对象转换为键值对数组并展开,每个元素包含组名(key)和组内数据(value)select(.key != "group_3")过滤掉不需要的group_3分组.key as $group将当前保留的组名存入变量,供后续输出使用- 再次对组内的name_x对象执行
to_entries[],展开每个name的键值对 - 最后通过字符串插值按要求格式化输出,
-r参数确保输出原始无引号的纯文本
如果需要排除多个分组,可以修改select条件,比如排除group_3和group_4就写成select(.key | IN("group_3", "group_4") | not)即可。
如果name_x对象下需要提取的字段是固定名称,也可以把to_entries[0].value替换为具体的字段名,比如.value.field_111,匹配效率更高。
内容的提问来源于stack exchange,提问作者Ege
相关产品推荐
相关产品推荐

