PostgreSQL无法在标量上调用json_object_keys

时间:2015-07-29 18:54:24

标签: json postgresql

我有一个带有JSON列的PostgreSQL表,我正在尝试获取该列中所有不同键的列表。我创建了一个查询来执行此操作:

SELECT DISTINCT json_object_keys(j) FROM t;

其中t是表,j是JSON列。这正确地处理了一小组数据,它将列出j中存在的所有密钥,而不重复它们。但是,在添加了更多数据后,它不再起作用,给出错误:

ERROR:  cannot call json_object_keys on a scalar

我不确定为什么会发生这种情况。通过一次一个地限制查询到某些行,我发现了一个导致错误的行。在该行中,jnull。但是,调用SELECT json_object_keys(null);不会导致此错误,而调用SELECT json_object_keys(j) FROM t WHERE id=12;则会导致此错误,此行中的j仅为null。我不确定从哪里开始。

所以我想我的问题是可能导致这种情况的原因,我怎么能解决它或阻止它发生?

运行PostgreSQL 9.3.9

编辑:好的,我可能已经预先发布了这一点。我发现问题行中的j不是null,而是'null'::json,仅仅选择行就不清楚了。这个导致标量错误,所以现在我只需要找出一种方法来选择j不是'null'::json的行。

1 个答案:

答案 0 :(得分:10)

我尝试了此查询,使用此查询过滤掉'null'::json值:

SELECT DISTINCT json_object_keys(j) from t WHERE j <> 'null'::json;

然而,显然没有json&lt;&gt; json运算符,所以我不得不将其转换为文本并进行比较。

SELECT DISTINCT json_object_keys(j) from t WHERE j::TEXT <> 'null';

这个有效!我不是Postgres专家,所以这可能不是最有效的检查方式。