0
DO
$$
DECLARE
array_ json;
category_name text;
category_ json:='{"Maincategory":"Vehicle","Categoryname":"Car"}'::json;
BEGIN
category_name:=(SELECT category_  ->'Maincategory'::text) ;
array_:=(SELECT elements -> category_name FROM webuser.footable WHERE id=somenumber)::json;
raise notice '%',array_ ;
END
$$;


                             elements                       
                              (json)                    
|-------------------------------------------------------------------------------------|
|{"Vehicle": [{"Car": 3}, {"Truck": 1}], "Office": [{"Printer": 3}, {"Desk": 8}]}     |

我有元素列,我想检索([{"Car": 3}, {"Truck": 1}]将存储在 array_ 变量中的车辆数组。我得到 array_ 总是空的。这段代码有什么问题?

4

1 回答 1

1

category_ ->'Maincategory'::text将返回"Vehicle",而您需要归档的值...

改变(SELECT category_ ->'Maincategory'::text)

(SELECT category_ ->>'Maincategory'::text), 像这儿:

b=# DO
b-# $$
b$# DECLARE
b$# array_ json;
b$# category_name text;
b$# category_ json:='{"Maincategory":"Vehicle","Categoryname":"Car"}'::json;
b$# elements  json:= '{"Vehicle": [{"Car": 3}, {"Truck": 1}], "Office": [{"Printer": 3}, {"Desk": 8}]}';
b$# BEGIN
b$# category_name:=(SELECT category_ ->>'Maincategory'::text) ;
b$# raise info '%',(select elements->category_name);
b$# --array_:=(SELECT elements -> category_name FROM webuser.footable WHERE id=somenumber)::json;
b$# --raise notice '%',array_ ;
b$# END
b$# $$;
INFO:  [{"Car": 3}, {"Truck": 1}]
DO
于 2016-12-05T16:18:19.620 回答