Postgresql PSQL向字符串添加换行符

Postgresql PSQL向字符串添加换行符,postgresql,Postgresql,我在PSQL中有一个函数,可以向特定用户发送电子邮件。函数接受电子邮件文本参数,并将其添加到电子邮件正文中前后的一些常量文本中: 在这个函数中,我有一个json_build_对象调用,它处理电子邮件的收件人、正文和标题: jsonb_build_object( 'recipient',recipient, 'title',title, 'message_text', 'some text before.

我在PSQL中有一个函数,可以向特定用户发送电子邮件。函数接受电子邮件文本参数,并将其添加到电子邮件正文中前后的一些常量文本中:

在这个函数中,我有一个json_build_对象调用,它处理电子邮件的收件人、正文和标题:

jsonb_build_object(
            'recipient',recipient,
            'title',title,
            'message_text', 'some text before.
             some text on new line ' || body ||
            ' some text after.
             some text on new line.'
        )
我的问题是,在正文前后的文本中,我无法将其格式化为单独的行。我尝试了以下方法,但无效:

jsonb_build_object(
            'recipient',recipient,
            'title',title,
            'message_text', E'some text before.\n
             some text on new line \n' || body ||
            E'\nsome text after.\n
             some text on new line.'
        )

有人能告诉我哪里做错了吗?

您做得正确,结果在表单中有换行符\n。这就是JSON中文本中的换行符的外观

RFC 8259对此进行了描述:

字符串以开头和结尾 引号。所有Unicode字符都可以放在 引号,必须转义的字符除外: 引号、反向索利多士和控制字符U+0000 通过U+001F

换行符是字符U+000A,因此必须对其进行转义


如果需要不带换行符的换行符,请使用JSON以外的其他内容。

如果正确执行,则结果将以以下形式显示换行符\n。这就是JSON中文本中的换行符的外观

RFC 8259对此进行了描述:

字符串以开头和结尾 引号。所有Unicode字符都可以放在 引号,必须转义的字符除外: 引号、反向索利多士和控制字符U+0000 通过U+001F

换行符是字符U+000A,因此必须对其进行转义


如果您想要不带换行符的换行符,请使用JSON以外的内容。

Laurenz Albe从JSON的结尾指出了这个问题。我的答案是关于另一端的

你用JSON做什么来把它写进电子邮件

从那里你可能想做什么就做什么。Python中的一个示例:

select * from json_build_object(
            'recipient', 'aklaver',
            'title', 'head bottlewasher',
            'message_text', 'some text before.\nsome text on new line ' || ' The body'||' some text after.\nsome text on new line.'
        );
                                                                             json_build_object                                                                              
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 {"recipient" : "aklaver", "title" : "head bottlewasher", "message_text" : "some text before.\\nsome text on new line  The body some text after.\\nsome text on new line."}

email_str = "some text before.\\nsome text on new line  The body some text after.\\nsome text on new line." 

print(email_str.replace("\\n", "\n"))                                                                                                                                      
some text before.
some text on new line  The body some text after.
some text on new line.


Laurenz Albe从一开始就指出了这个问题。我的答案是关于另一端的

你用JSON做什么来把它写进电子邮件

从那里你可能想做什么就做什么。Python中的一个示例:

select * from json_build_object(
            'recipient', 'aklaver',
            'title', 'head bottlewasher',
            'message_text', 'some text before.\nsome text on new line ' || ' The body'||' some text after.\nsome text on new line.'
        );
                                                                             json_build_object                                                                              
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 {"recipient" : "aklaver", "title" : "head bottlewasher", "message_text" : "some text before.\\nsome text on new line  The body some text after.\\nsome text on new line."}

email_str = "some text before.\\nsome text on new line  The body some text after.\\nsome text on new line." 

print(email_str.replace("\\n", "\n"))                                                                                                                                      
some text before.
some text on new line  The body some text after.
some text on new line.