【问题标题】:Detect if a jsonb attribute is array or object检测 jsonb 属性是数组还是对象
【发布时间】: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

【问题讨论】:

    标签: sql postgresql jsonb


    【解决方案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' ;
    

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      相关资源
      最近更新 更多