json - 转换为 json 时 Postgres psql 输出文本换行
问题描述
我在 psql 中有一个奇怪的行为,它使长 base64 编码的文本在转换为 json 字符串时被换行符打破
我将我的文本编码为 base64,如下所示:
db=> select encode('-------------------------------------------------------------------'::bytea, 'base64');
encode
------------------------------------------------------------------------------
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t+
LS0tLS0tLS0tLQ==
这里输出文本被包装,这实际上不是问题。但是,如果我使用以下命令将此 base64 编码文本转换为 json 字符串to_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 ...
(来自其他 stackoverflow 问题:禁用 Psql 输出中的包装)但没有成功。
我找到的唯一解决方案(也是一个非常肮脏的解决方案)是:
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 以获得预期结果。
解决方案
推荐阅读
- typescript - 在类本身内使用 ES6 类的类型
- spring-boot - 使用 GSON 的 Spring Boot 中的多种日期格式
- visual-studio-code - 我在搞乱 Visual Studio Code,现在所有终端都使用(基本)环境打开
- react-native - async-storage SyntaxError 使用 Babel7 编译时出现意外标识符
- excel - 尝试使用特殊单元格创建动态复制和替换功能
- java - SQLite Delete Cascade 不起作用:FOREIGN KEY 约束失败
- java - java构造函数不能应用于给定类型android studio
- oracle - 在Oracle中存储大数--请举一个可以存储9e125的例子
- reactjs - 是否可以在不传入函数的情况下使用外部函数或子项更改容器的状态?
- javascript - 尝试启动 Nightwatch Runner 时发生错误