gpt4 book ai didi

json - 使用 jq 换行

转载 作者:行者123 更新时间:2023-12-04 18:59:20 43 4
gpt4 key购买 nike

我已经看过很多关于此的帖子,但无法弄清楚我到底需要什么。我试过-rargjson除其他事项外。
我需要换行符保持为 \n并且不会转义到 \\n .
我还希望能够将 ``` 用于代码块,但它会忽略字符串的那一部分。

FALLBACK_MESSAGE="TEST MESSAGE - $HOSTNAME"
MARKDOWN_MESSAGE="TEST MESSAGE - $HOSTNAME \(0x0a) \(\n) Hi <@U12345789>\n```Can we do a\nmultiline code block```"
JSON_STRING=$( jq -nr \
--arg fallbackMessage "$FALLBACK_MESSAGE" \
--arg sectionType "section" \
--arg markdownType "mrkdwn" \
--arg textMessage "$MARKDOWN_MESSAGE" \
'{
text: $fallbackMessage,
blocks: [
{
type: $sectionType,
text: {
type: $markdownType,
text: $textMessage
}
}
]
}')
echo $JSON_STRING
输出:
{ "text": "TEST MESSAGE - devDebug", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": "TEST MESSAGE - devDebug \\(0x0a) \\(\\n) Hi <@U12345789>\\n" } } ] }

最佳答案

确保您的 shell 变量包含实际的换行符,而不是 \n序列。
如果您希望 bash 将字符串中的转义序列转换为它们所引用的字符,printf %b可用于此目的。

#!/usr/bin/env bash

fallback_message="TEST MESSAGE - $HOSTNAME"
markdown_message="TEST MESSAGE - $HOSTNAME \(0x0a) \(\n) Hi <@U12345789>\n\`\`\`Can we do a\nmultiline code block\`\`\`"

# create markdown_message_unescaped with an unescaped version of markdown_message
printf -v markdown_message_unescaped %b "$markdown_message"

jq -n \
--arg textMessage "$markdown_message_unescaped" \
--arg fallbackMessage "$fallback_message" \
--arg sectionType section --arg markdownType markdown '
{
text: $fallbackMessage,
blocks: [
{
type: $sectionType,
text: {
type: $markdownType,
text: $textMessage
}
}
]
}'
...正确地作为输出发出:
{
"text": "TEST MESSAGE - YOUR_HOSTNAME",
"blocks": [
{
"type": "section",
"text": {
"type": "markdown",
"text": "TEST MESSAGE - YOUR_HOSTNAME (0x0a) (\n)\nHi <@U12345789>\n```\nCan we do a multiline code block\n```"
}
}
]
}

关于json - 使用 jq 换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67391180/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com