说我输入了
{"DESCRIPTION": "Need to run script to do stuff", "PRIORITY": "Medium"}
但也可以输入
{"STACK_NAME": "applecakes", "BACKEND_OR_INTEGRATIONS": "integrations", "PRIORITY": "Medium"}
即参数可以完全不同。
我需要以更友好的格式获取输出,以发送给Jira制作票证。具体来说,我想剥离json格式,并在每个密钥对之间插入\n
。上面的示例应该是这样的:
DESCRIPTION: Need to run script to do stuff\nPRIORITY: Medium
STACK_NAME: applecakes\nBACKEND_OR_INTEGRATIONS: integrations\nPRIORITY: Medium
例如,如果需要更多空间或其他任何东西,可能会有一点灵活性。
到目前为止,我已经解决了这个问题(假设我的输入存储在名为description
的变量中
echo $description | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]"
这可以去除JSON格式,但不能处理换行符。我很困惑如何确保仅在每个键对上分割,而不是在每个空格或同样混乱的东西上分割。我需要添加什么以包括换行符?地图是我最好的选择吗?
答案 0 :(得分:3)
只需将字符串数组与\\n
(我们需要转义的\
字符和n
字符的序列)连接起来并使用raw-output:
jq --raw-output 'to_entries | map("\(.key) : \(.value)") | join("\\n")'
here试试。
答案 1 :(得分:1)
或更有效,更简单:
jq -r 'to_entries[] | "\(.key) : \(.value)"'
每个键值对产生一行。
\n
作为连接字符串使用示例JSON,调用:
jq -j -r 'to_entries[] | "\(.key) : \(.value)", "\\n" '
会产生:
STACK_NAME : applecakes\nBACKEND_OR_INTEGRATIONS : integrations\nPRIORITY : Medium\n
请注意结尾的“ \ n”。