如何从JSONB
获取契约PostgreSQL
?
我在获取时得到的只是空格:
SELECT data FROM a_table WHERE id = 1; -- data is JSONB column
{"unique": "bla bla", "foo": {"bar": {"in ...
^ ^ ^ ^ ^ --> spaces
我想要的是:
{"unique":"bla bla","foo":{"bar":{"in ...
答案 0 :(得分:1)
jsonb
在输出时以标准格式呈现。您必须使用json
来保留无关紧要的空白区域。 Per documentation:
因为
json
类型存储输入文本的精确副本,所以它会 在令牌之间保留语义无关紧要的空白区域 以及JSON对象中的键的顺序。另外,如果是JSON对象 在值内不止一次包含相同的键,全部 键/值对保留。 (处理功能考虑到最后一个 值作为有效的。)相比之下,jsonb
不保留 空格,不保留对象键的顺序,也不保留 保留重复的对象密钥。
对于JSON值,空格真的无关紧要。
答案 1 :(得分:1)
json_strip_nulls()
完全满足您的需求:
SELECT json_build_object('a', 1);
返回
{"a" : 1}
但是
SELECT json_strip_nulls(json_build_object('a', 1));
返回
{"a":1}
此函数不仅会按其函数名称和documented的指示剥离空值,而且还会剥离不重要的空格。后者没有在PostgreSQL手册中明确记录。
在PostgreSQL 11.3中进行了测试,但也可能与早期版本兼容。