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

Posted

技术标签:

【中文标题】检测 jsonb 属性是数组还是对象【英文标题】:Detect if a jsonb attribute is array or object 【发布时间】:2018-04-10 09:25:57 【问题描述】:

许多 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】:

如documentation 中所述,函数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' ;

【讨论】:

以上是关于检测 jsonb 属性是数组还是对象的主要内容,如果未能解决你的问题,请参考以下文章