2017-07-10 12 views
1

私はjson形式の列を持つpostgresqlテーブルを持っています。sqlテーブルのjsonからすべての値を抽出します

サンプル列値:

{"Apple":{"category":"fruit","price":100},"Orange":{"category":"fruit","price":80}} 

は今、私はこのコラムを選択して、各行のすべての項目に"price"を抽出したいです。列を取得する

問合せ:

select items from my_table 

特定の項目のためのJSON値を抽出するために、私は

select items -> 'Orange' -> 'price' as price 
from my_table 

を使用することができますしかし、どのように私は、アップル(すべてのアイテムの価格を抽出しますオレンジ)?多分配列として。

答えて

1

使用json_each()、例えば:

with my_table(items) as (
    values (
    '{"Apple":{"category":"fruit","price":100},"Orange":{"category":"fruit","price":80}}'::json 
    ) 
) 

select key, (value->>'price')::numeric as price 
from my_table, 
json_each(items) 

    key | price 
--------+------- 
Apple | 100 
Orange | 80 
(2 rows)  
+0

どのように私は私の実際のテーブルからクエリとここにハードコードされたJSON値を置き換えますか? –

+1

'with ...'をスキップして 'select ...'を実行してください。 – klin

1
t=# with my_table(items) as (
    values('{"Apple":{"category":"fruit","price":100},"Orange":{"category":"fruit","price":80}}'::json) 
) 
select 
    json_object_keys(items) 
, items->json_object_keys(items)->>'price' 
from my_table; 
json_object_keys | ?column? 
------------------+---------- 
Apple   | 100 
Orange   | 80 
(2 rows) 

json_object_keyshttps://www.postgresql.org/docs/9.5/static/functions-json.html

関連する問題