检测jsonb属性是否为数组或对象

时间:2017-10-29 06:59:45

标签: sql postgresql jsonb

许多jsonb / json函数都希望列的所有值都是json数组(如jsonb_array_length)或只有json对象(如jsonb_build_oject)。

数据库中有一些jsonb列包含数组和对象根的混合,是否有任何简单的方法来过滤掉数组和对象,以便像

这样的查询
SELECT DISTINCT jsonb_object_keys(my_column) FROM my_table;
 cannot call jsonb_object_keys on an array

SELECT my_column FROM my_table WHERE jsonb_array_length(column) > 0;
cannot get array length of a non-array

1 个答案:

答案 0 :(得分:6)

如[{3}}中所述,函数jsonb_typeofjson_typeof可用于应用此类过滤

喜欢

SELECT DISTINCT jsonb_object_keys(my_column) 
FROM my_table WHERE jsonb_typeof(column) ='object' ;

SELECT my_column FROM my_table 
WHERE jsonb_array_length(column) > 0 
AND jsonb_typeof(column) ='array' ;