检测 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_typeof
或json_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 属性是数组还是对象的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL:更新JSONB结构中嵌套数组中元素的属性
Postgresql Jsonb字段内含数组属性的删除元素操作