如何将jq输出的key=value键值对转换为逗号分隔字符串并解决join报错问题
解决jq转换JSON为逗号分隔key=value字符串的问题
我来帮你搞定这个问题!你之前遇到的错误是因为join(",")的使用时机不对——当你用to_entries[]迭代输出每个key=value字符串时,join接收到的是单个字符串而非数组,自然会报错说无法遍历字符串。
正确的jq命令
你需要先把所有生成的key=value字符串收集到一个数组里,再对数组执行join操作,命令如下:
jq -r '[to_entries[] | .key + "=" + .value] | join(",")' <(echo "$foo")
命令解释
[to_entries[] | .key + "=" + .value]:用方括号把to_entries[]迭代生成的所有key=value字符串包裹成一个数组,比如会得到["app=myApp", "env=test", "tier=frontend"]| join(","):对这个数组执行逗号分隔的拼接操作,最终输出你想要的格式:app=myApp,env=test,tier=frontend
验证效果
假设你的foo变量存储的JSON是:
{"app": "myApp", "env": "test", "tier": "frontend"}
运行上述命令后,就能得到完全符合期望的逗号分隔字符串,直接存入变量即可:
result=$(jq -r '[to_entries[] | .key + "=" + .value] | join(",")' <(echo "$foo")) echo $result # 输出:app=myApp,env=test,tier=frontend
内容的提问来源于stack exchange,提问作者Tiya Jose
相关产品推荐
相关产品推荐

