如何使用JQ从含重复键的嵌套数组中提取首个匹配的单个值
问题根源
你的原过滤器中.tags[] | select(.key == "env")会遍历所有tags元素,每匹配到一个符合条件的标签就会生成一个独立输出,所以当同一个对象下有多个大小写不同的env标签时,就会输出多条重复的父对象记录。
修正后过滤器
jq -r '.[] | .env = first(.tags[] | select(.key | ascii_downcase == "env").values[0]) | [.accountid, .name, .env] | @csv' test.json
运行输出结果
111,"integration1","prod" 222,"integration2","prod" 333,"integration3","test"
逻辑说明
- 用
first()函数包裹标签筛选逻辑,只会返回第一个匹配的标签值,后续匹配的重复标签直接忽略,保证每个父对象仅生成1条输出 - 筛选时直接对key做小写转换匹配,不需要提前修改原tags数组的内容,不会改动原始数据结构
内容的提问来源于stack exchange,提问作者Colin
相关产品推荐
相关产品推荐

