我有一个JSON文件:
{
"foo": "xxx",
"bar": ["yyy","zzz"]
}
我想使用JQ将其转换为:
xxx yyy,zzz
我已经尝试了各种方法,最接近的是:
▶ cat xx.json | jq -r 'to_entries[] | if (.value | type)=="string" then (.value) else (.value | join(",")) end'
xxx
yyy,zzz
请注意,我事先不知道JSON文件中键的名称,并且我依靠的行为to_entries
按键对输出进行排序(按键排序)(以防万一有人在考虑这样做的方式)导致输出不确定地排序)。
是否有使用JQ单缸衬套的简洁方法?
就在这里:
<file jq -r '[.foo,(.bar|join(","))]|join(" ")'
它仅将两次.foo
和.bar
字段连接两次,以使它们在同一行中。
如果您不知道键名,则可以使用以下命令:
<file jq -r 'to_entries|map(.value|[strings?//.[]]|join(","))|join(" ")'
这与您的解决方案很接近,除了它使用strings
内置函数和运算符,//
并?
避免使用if ... then ...
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句