2017-01-19 4 views
0

マップする配列(名前、値)。PostgreSQLのJSONフィールドの構造を変更するには?

{'email':'[email protected]','phone':123123} 

[{'name':'email,'value':'[email protected]'},{'name':'phone','value':123123}] 

私は、検索や電子メールを並べ替えを整理する必要があると私は、地図データ構造体でViewTableを作るために簡素化したいと思います。

+0

可能な複製。 [新しいPostgreSQL JSONデータ型内のフィールドを変更する方法は?](http://stackoverflow.com/questions/18209625/how-do-i-modify-fields-inside-the-new-postgresql-json-datatype) – McNets

答えて

0
with t(id,j) as (
    values(1,'[{"name":"email","value":"[email protected]"},{"name":"phone","value":123123}]'::json)) 
select json_object_agg(a.j->>'name', a.j->>'value') 
from t, json_array_elements(j) a(j) group by id; 
╔════════════════════════════════════════════════════╗ 
║     json_object_agg     ║ 
╠════════════════════════════════════════════════════╣ 
║ { "email" : "[email protected]", "phone" : "123123" } ║ 
╚════════════════════════════════════════════════════╝ 
+0

ありがとうございます!json_array_elemeのthisse.select json_object_agg(a - >> 'name'、 - >> 'value') {"name": "phone"、 "value": "123123"}、{"name": "email"、 "value": "[email protected]" –

+0

@happy_yarはい、それはちょっと単純で、 'select'節や' update'文のソースとしてサブクエリとして使うことができます。 – Abelisto

0

私の代わりに、単一の上、実際のJSON(DBL引用符であるためにあなたの入力データを変更し、ここでこのtransofrmationはそれを「構築」する方法の一例である後のアレイのためのキー名を追加しました:

t=# with j as (
    select '{"arr":[{"name":"email","value":"[email protected]"},{"name":"phone","value":123123}]}'::json v 
) 
select 
    concat('{',v->'arr'->0->'name',':',v->'arr'->0->'value',',',v->'arr'->1->'name',':',v->'arr'->1->'value','}')::json 
from j 
; 
{"email":"[email protected]","phone":123123} 
+0

ありがとうございますが、ペア(名前、値)の数が異なる可能性があるため、これは機能しません –

関連する問題