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"}');
実行結果
