2016-03-23 7 views
8

私はjson配列を私のpostgresデータベースに格納しています。 JSONは次のようになります。json配列をpostgresの行に変換する方法

[ 
     { 
      "operation": "U", 
      "taxCode": "1000", 
      "description": "iva description", 
      "tax": "12" 
     }, 
     { 
      "operation": "U", 
      "taxCode": "1001", 
      "description": "iva description", 
      "tax": "12" 
     }, 
     { 
      "operation": "U", 
      "taxCode": "1002", 
      "description": "iva description", 
      "tax": "12" 
     } 
    ] 

今私は、任意の要素は、クエリ結果の異なる行にあるように、配列を選択する必要があります。だから私は実行するSELECT文では、このようにデータを返す必要があります。

data 
-------------------------------------------------------------------------------------- 
{ "operation": "U", "taxCode": "1000", "description": "iva description", "tax":"12"} 
{ "operation": "U", "taxCode": "1001", "description": "iva description", "tax":"12"} 
{ "operation": "U", "taxCode": "1002", "description": "iva description", "tax":"12"} 

私はunnest()機能に

SELECT unnest(json_data::json) 
FROM my_table 

を使用してみましたが、それは私がお勧めしjsonbタイプ

+2

'unnest()'はPostgreSQLの配列型用です。 [使用](http://www.postgresql.org/docs/current/static/functions-json.html) 'json_array_elements(json)'(9.3+)、 'jsonb_array_elements(jsonb)'(9.4+)または 'json [b] _array_elements_text(json [b]) '(9.4+) – pozs

+0

ありがとうございます。あなたが質問をするなら、私はそれを受け入れることができます。 – k4ppa

答えて

10

コメント欄にpozsが元々書いた回答を投稿します。

unnest()は、PostgreSQLの配列タイプ用です。

代わりに以下の機能のいずれかを使用することができる。

  • json_array_elements(json)(9.3+)
  • jsonb_array_elements(jsonb)(9.4+)
  • json[b]_array_elements_text(json[b])(9.4+)

v9.4のドキュメントを見つけることができる3210

出力値

------------- 
| 1   | 
------------- 
| true  | 
------------- 
| [2,false] | 
------------- 

Here

6

を受け入れませんあなたのケースではjson_to_recordsetコマンドを使用してください。あなたのSQLは、次にすべきである:

select * from json_to_recordset('[{"operation":"U","taxCode":1000},{"operation":"U","taxCode":10001}]') as x("operation" text, "taxCode" int); 

出力である:

------------------------ 
| |operation|taxCode | 
------------------------ 
| 1 | "U" | 1000 | 
------------------------ 
| 2 | "U" | 10001 | 
------------------------ 

例の列(またはJSONキー)が自由にさらに拡張することができます。

+0

高尚なflavio、私はそのような良いテーブルを作成することはできませんでした。 – user2080851

関連する問題