映射,但在密钥对之间使用换行符

时间:2019-03-22 13:43:16

标签: json jq key-value

说我输入了

{"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格式,但不能处理换行符。我很困惑如何确保仅在每个键对上分割,而不是在每个空格或同样混乱的东西上分割。我需要添加什么以包括换行符?地图是我最好的选择吗?

2 个答案:

答案 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”。