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

map, but with newline characters between keypairs

假设我有像

这样的输入
{"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

可以有一点灵活性,例如,如果需要更多 space 或其他什么。

到目前为止我已经解决了这个问题(假设我的输入存储在一个名为 description

的变量中
echo $description | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]"

这可以去除 JSON 格式,但不处理换行符。我对如何确保仅在每个密钥对上进行拆分感到困惑,而不是在每个 space 或任何同样混乱的情况下进行拆分。我需要添加什么来包含换行符?地图是我最好的选择吗?

只需将字符串数组与 \n 连接起来(我们需要转义的 \ 字符和 n 字符的序列)并使用原始输出:

jq --raw-output 'to_entries | map("\(.key) : \(.value)") | join("\n")'

试试看 here.

或者更高效更简单:

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