我在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编码的文本在末尾处有换行符((感谢Laurenz Albe进行更正!)。 换行符在以后的程序中给我带来麻烦,我正在寻找解决方案以在psql中对其进行修复。 \n
),这在解码时完全破坏了base64代码
我尝试使用/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以得到预期的结果。