2017-04-25 168 views
1

我想在Postgres中使用SQL來提取數據,但希望進入JSON結果並只提取我需要的數據。在JSON中選擇數據

如果我寫(在瓦倫蒂娜工作室):

Select "data" from "cars" 

第一行是這樣的:

[{"Model": "Golf", "Make": "VW", "Engine": "2.9"}, 
{"Model": "M3", "Make": "BMW", "Engine": "3.0"}] 

我想什麼是簡單的:

Golf, M3"Golf", "M3"

然後我也可以對012使用相同的方法或"Engine"

本質上我不希望我的結果在JSON中。

回答

1

使用json_array_elements()

with cars(data) as (
values 
    ('[ 
     {"Model": "Golf", "Make": "VW", "Engine": "2.9"}, 
     {"Model": "M3", "Make": "BMW", "Engine": "3.0"} 
    ]'::json) 
) 

select 
    elem->>'Model' as model, 
    elem->>'Make' as make, 
    elem->>'Engine' as engine 
from cars, 
lateral json_array_elements(data) elem 

model | make | engine 
-------+------+-------- 
Golf | VW | 2.9 
M3 | BMW | 3.0 
(2 rows)  
2
SELECT string_agg(x->>'Model', ',') 
FROM cars 
    CROSS JOIN LATERAL 
     jsonb_array_elements(data) x 
GROUP BY cars; 

┌────────────┐ 
│ string_agg │ 
├────────────┤ 
│ Golf,M3 │ 
└────────────┘ 
(1 row) 
0

我想我也得到了我想要的東西(和融化它,我正打算做的方式)與:從上面我

select obj->'Model' as model, obj->'Make' as make, 
obj->'Engine' as engine from data n, jsonb_array_elements(n.DATA) as obj 

還可以使用:

select 
    elem->>'Model' as model, 
    elem->>'Make' as make , 
    elem->>'Engine' as engine 
from cars, 
lateral jsonb_array_elements(data) elem; 

感謝您的幫助!