2016-07-11 14 views
0

JSON配列を関数json_array_elements()でUnnestしようとしましたが、json_array_length(field_name)を使用して配列の要素を数えようとしましたが、PostgreSQLを使用しています9.4.5。JSON内の配列要素のクエリ配列型

私は、要素 'name'の結果を照会しようとしていましたが、これはjson型配列フィールドのデータ保持です。 json []。

crew": [ 
     { 
      "workHours": "9", 
      "workers": "50", 
      "checker_rate": 100, 
      "rate": 150, 
      "name": "Ramona", 
      "last": null, 
      "boxRate": 2, 
      "checkTraining": false, 
      "editing": true, 
      "ix": 0, 
      "breakPay": 3.0833333333333335, 
      "trainingPay": 0 
     }, 
     { 
      "workHours": "4", 
      "workers": "50", 
      "checker_rate": 120, 
      "rate": 160, 
      "name": "Ramon", 
      "last": "Rosas", 
      "boxRate": 2, 
      "checkTraining": false, 
      "editing": false, 
      "id": 1, 
      "breakPay": 1.5416666666666667, 
      "trainingPay": 0 
     } 
    ] 

答えて

1

この問題は、json []タイプの誤った使用に起因します。 json配列は単一のjsonオブジェクトであり、その型はjsonであり、jsonではありません。例:

create table test (id int, crew json); 
insert into test values 
(1, ' 
[ 
    { 
     "workHours": "9", 
     "workers": "50", 
     "checker_rate": 100, 
     "rate": 150, 
     "name": "Ramona", 
     "last": null, 
     "boxRate": 2, 
     "checkTraining": false, 
     "editing": true, 
     "ix": 0, 
     "breakPay": 3.0833333333333335, 
     "trainingPay": 0 
    }, 
    { 
     "workHours": "4", 
     "workers": "50", 
     "checker_rate": 120, 
     "rate": 160, 
     "name": "Ramon", 
     "last": "Rosas", 
     "boxRate": 2, 
     "checkTraining": false, 
     "editing": false, 
     "id": 1, 
     "breakPay": 1.5416666666666667, 
     "trainingPay": 0 
    } 
]'); 

関数予想通りjson_array_elements()作品:

select id, elem->'name' as name 
from test, json_array_elements(crew) elem; 

id | name 
----+---------- 
    1 | "Ramona" 
    1 | "Ramon" 
(2 rows) 

クエリの1つ(または両方)json[]とうまく動作するはず:

select id, elem->'name' as name 
from test, json_array_elements(crew[1]) elem; 

select id, elem->'name' as name 
from test, unnest(crew), json_array_elements(unnest) elem; 
+0

私が変更しようとしましたフィールドをプレーンjsonに戻す必要がありましたが、私は元に戻らなければなりませんでした。 nノードサーバー側で[エラー:json型の入力構文が無効です]というエラーが表示されるため、データを交換する配列として機能しています。 – Jose

関連する問題