代码之家  ›  专栏  ›  技术社区  ›  charilaos13

postgres json数组元素和null返回

  •  1
  • charilaos13  · 技术社区  · 8 年前

    我在postgres的一个表中有一个json列,其中包含一个对象数组,例如。

    {"BlockData":[{"Name":"George","Age":"54","Height":"1.75"}, {"Name":"Mario","Age":"35","Height":"1.90"}]}
    

    我正在使用Select查询,希望访问Name对象和Name的值对(George和Mario)。我试图做到以下几点:

    select jsonb_array_elements(jsondoc_->'BlockData')->>'Name' from BlockData;
    

    我得到的回报是

    "ERROR:  cannot extract elements from a scalar
    
    SQL state: 22023"
    

    从中我可以发现,出现这个问题是因为在某些行中,返回值为NULL。你能建议我如何重叠这个问题吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Vao Tsun    8 年前

    你试过过滤它们吗?

    t=# with t(jsondoc_) as (values('{"BlockData":[{"Name":"George","Age":"54","Height":"1.75"}, {"Name":"Mario","Age":"35","Height":"1.90"}]}'::jsonb),('{"BlockData":null}'))
    select jsonb_array_elements(jsondoc_->'BlockData')->>'Name' from t
    where jsondoc_->'BlockData' <> 'null';
     ?column?
    ----------
     George
     Mario
    (2 rows)