2016-12-05 2 views
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_ всегда null. Что не так с этим кодом?не может получить значение объекта JSON POSTGRESQL 9.6

ответ

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 
+0

, что работает, но если Я использую переменную (в этом случае: category_name) вместо «Vehicle», чем она не работает. – sommeguyy

+0

@sommeguyy Я обновил ответ - mind '->' отличается от '- >>' –

Смежные вопросы