i Postgres中的表中有一个JSON列,其中包含一系列对象,例如
{"BlockData":[{"Name":"George","Age":"54","Height":"1.75"}, {"Name":"Mario","Age":"35","Height":"1.90"}]}
我正在使用选择查询,并希望访问名称对象和名称的值对(George and Mario)。我要尝试的是以下内容:
select jsonb_array_elements(jsondoc_->'BlockData')->>'Name' from BlockData;
我得到的回报是
"ERROR: cannot extract elements from a scalar SQL state: 22023"
我能发现的是,这个问题是因为在某些行中返回为null。您能建议我如何重叠这个问题吗?
您是否尝试过滤它们?
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)