在PostgreSQL中获取JSONB的紧凑版本

时间:2014-12-16 12:56:37

标签: string postgresql-9.4 jsonb

如何从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 ...

2 个答案:

答案 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中进行了测试,但也可能与早期版本兼容。