转换为json时的Postgres psql输出文本换行

时间:2018-07-17 10:00:53

标签: json postgresql base64 psql textwrapping

我在psql中有一个奇怪的行为,当转换为json字符串时,会使长的base64编码文本用换行符中断

我在base64中对文本进行编码,如下所示:

db=> select encode('-------------------------------------------------------------------'::bytea, 'base64');
                                    encode                                    
------------------------------------------------------------------------------
 LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t+
 LS0tLS0tLS0tLQ==

这里输出文本被换行了,这实际上不是问题。 但是,如果我使用to_json()将此base64编码的文本转换为json字符串:

db=> select to_json(encode('-------------------------------------------------------------------'::bytea, 'base64')::text);
                                             to_json                                              
--------------------------------------------------------------------------------------------------
 "LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t\nLS0tLS0tLS0tLQ=="

此处json中以base64编码的文本在末尾处有换行符(\n),这在解码时完全破坏了base64代码(感谢Laurenz Albe进行更正!)。 换行符在以后的程序中给我带来麻烦,我正在寻找解决方案以在psql中对其进行修复。

我尝试使用/pset format命令或设置PAGER="less -SF" psql ...(由于其他堆栈溢出问题:Disable wrapping in Psql output),但没有成功。

我找到的唯一解决方案(也是一个很脏的)是:

db=> select to_json(regexp_replace((select to_json(encode('----------------------------------------------------------'::bytea, 'base64')::text))::text, '(\\n|")', '', 'g'));
                                      to_json                                       
------------------------------------------------------------------------------------
 "LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ=="

在这里,我将转换为JSON字符串(使用to_json()),然后删除JSON字符串引号和换行符(使用regexp_replace()),然后再次重新转换为JSON以得到预期的结果。

0 个答案:

没有答案