检测jsonb属性是数组还是对象

Man*_*uer 8 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
Run Code Online (Sandbox Code Playgroud)

要么

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

Man*_*uer 9

文档中所述,功能jsonb_typeofjson_typeof可用于应用这种过滤

喜欢

SELECT DISTINCT jsonb_object_keys(my_column) 
FROM my_table WHERE jsonb_typeof(column) ='object' ;
Run Code Online (Sandbox Code Playgroud)

要么

SELECT my_column FROM my_table 
WHERE jsonb_array_length(column) > 0 
AND jsonb_typeof(column) ='array' ;
Run Code Online (Sandbox Code Playgroud)