如何用JQ提取filterFeatureGroup对象的键值并拼接为指定数组?
解决JQ提取JSON键值拼接时的重复问题
问题需求
提取JSON中filterFeatureGroup对象的键与对应值数组中的元素,将每个键和值拼接为「键: 值」格式的字符串,最终组成目标数组,但现有JQ代码输出存在元素重复问题。
原始JSON数据
{ "filterFeatureGroup": { "Hauttyp": [ "Normal" ], "Deckkraft": [ "Mittlere Deckkraft" ], "Grundfarbe": [ "Grau" ], "Produkteigenschaften": [ "Vegan" ], "Textur / Konsistenz / Applikation": [ "Stift" ] } }
期望输出
[ "Hauttyp: Normal", "Deckkraft: Mittlere Deckkraft", "Grundfarbe: Grau", "Produkteigenschaften: Vegan", "Textur / Konsistenz / Applikation: Stift" ]
尝试的JQ代码
jq ".filterFeatureGroup| (keys[]| split(\",\")) + (values[])| join(\": \")"
解决方案
使用to_entries将对象转换为键值对数组,再逐个拼接字符串:
jq ".filterFeatureGroup | to_entries | map(\"\(.key): \(.value[])\")"
如果确定每个值数组只有一个元素,也可以用.value[0]替代.value[],效果一致:
jq ".filterFeatureGroup | to_entries | map(\"\(.key): \(.value[0])\")"
问题原因说明
你之前的代码错误地将keys[]和values[]分开遍历,这会导致两者做笛卡尔积组合,从而产生重复元素。而to_entries会把每个键和对应的绑定值配对成单独的对象,确保每个键只和自己对应的值拼接,避免重复。
内容的提问来源于stack exchange,提问作者shadowgirl26
相关产品推荐
相关产品推荐

