PostgreSQL jsonデータをkeyとvalueの組み合わせを取得する

PostgreSQL jsonデータをkeyとvalueの組み合わせを取得する

PostgreSQLで、jsonデータをkeyとvalueの組み合わせを取得する手順を記述してます。「json_each」を使用することで可能です。textデータとして取得する場合は「json_each_text」を使用します。

環境

  • OS CentOS Stream release 9
  • PostgreSQL 15.1
  • pgadmin4 6.16

keyとvalueの組み合わせを取得

keyとvalueの組み合わせを取得するには、「json_each」を使用します。
※「josnb型」には「jsonb_each」を使用します。

json_each(jsonデータ);

jsonb_each(jsonbデータ);

実際に、実行してみます。

SELECT 
json_each('{"1":"aaa", "2":"bbb", "3":"ccc"}'),
jsonb_each('{"1":"aaa", "2":"bbb", "3":"ccc"}');

実行結果をみると取得されていることが確認できます。

型の違う「jsonb」に「json_each」を使用するとエラーとなります。
実際に、以下のテーブルの「jsonb」型の「jsonb_data」に実行してみます。

エラーとなることが確認できます。

SELECT 
json_each(jsonb_data)
from json_test;

ERROR:  関数json_each(jsonb)は存在しません
LINE 2: json_each(jsonb_data)
        ^
HINT:  指定した名前と引数型に合致する関数がありません。明示的な型変換が必要かもしれません。
SQL 状態: 42883
文字: 9

実行結果

空を指定

引数を空にすると、エラーが発生します。

SELECT 
json_each();

ERROR:  関数json_each()は存在しません
LINE 2: json_each();
        ^
HINT:  指定した名前と引数型に合致する関数がありません。明示的な型変換が必要かもしれません。
SQL 状態: 42883
文字: 9

実行結果

textデータで取得

textデータとして取得する場合は「json_each_text」を使用します。

SELECT 
json_each_text('{"1":"aaa", "2":"bbb", "3":"ccc"}'),
jsonb_each_text('{"1":"aaa", "2":"bbb", "3":"ccc"}');

実行結果