他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

9.15. JSON関数と演算子

表9-39はJSONデータ (項8.14を参照)と共に使用可能な演算子を示しています。

表 9-39. JSON 演算子

演算子右オペランド型説明
->intJSON 配列要素取得'[1,2,3]'::json->2
->textJSON オブジェクトフィールド取得'{"a":1,"b":2}'::json->'b'
->>intJSON 配列要素をテキストとして取得'[1,2,3]'::json->>2
->>textJSON オブジェクトフィールドをテキストとして取得'{"a":1,"b":2}'::json->>'b'
#>text配列指定されたパスにてJSONオブジェクトを取得'{"a":[1,2,3],"b":[4,5,6]}'::json#>'{a,2}'
#>>text配列指定されたパスにてJSONオブジェクトをテキストとして取得'{"a":[1,2,3],"b":[4,5,6]}'::json#>>'{a,2}'

表9-40に、JSON(詳細は項8.14)データを作成し、操作するために利用可能な関数を示します。

表 9-40. JSONサポート関数

関数戻り値型説明結果例
array_to_json(anyarray [, pretty_bool]) json 配列をJSON型として返します。PostgreSQLの多次元配列はJSON配列の配列となります。もしpretty_boolが真の場合、次元を1つの要素とし、その間へラインフィードが加えられます。 array_to_json('{{1,5},{99,100}}'::int[])[[1,5],[99,100]]
row_to_json(record [, pretty_bool]) json 行をJSON型として消します。もしpretty_boolが真の場合、レベルを1つの要素とし、その間へラインフィードが加えられます。 row_to_json(row(1,'foo')){"f1":1,"f2":"foo"}
to_json(anyelement) json JASONとして値を返す。データ型が組み込まれておらず、その型からjsonにキャストがあれば、キャスト関数が変換のために用いられます。さもなくば、数値、論理値、またはNULL値以外のいかなる値、文字列内部表現が使用されている、正式なJSONと認められるエスケープおよび引用されているものである必要があります。 to_json('Fred said "Hi."'::text)"Fred said \"Hi.\""
json_array_length(json) int JSON配列の最も外側の要素の数を返す。 json_array_length('[1,2,3,{"f1":1,"f2":[5,6]},4]')5
json_each(json) SETOF key text, value json JSONオブジェクトの最も外側をkey/valueの組み合わせに拡張する。 select * from json_each('{"a":"foo", "b":"bar"}')
 key | value
-----+-------
 a   | "foo"
 b   | "bar"
 
json_each_text(from_json json) SETOF key text, value text JSONオブジェクトの最も外側をkey/valueの組み合わせに拡張する。帰り値は型テキスト(value text)。 select * from json_each_text('{"a":"foo", "b":"bar"}')
 key | value
-----+-------
 a   | foo
 b   | bar
 
json_extract_path(from_json json, VARIADIC path_elems text[]) json path_elemsで示されたJSONオブジェクトを返す。 json_extract_path('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4'){"f5":99,"f6":"foo"}
json_extract_path_text(from_json json, VARIADIC path_elems text[]) text path_elemsで示されたJSONオブジェクトを返す。 json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"foo"}}','f4', 'f6')foo
json_object_keys(json) SETOF text JSONオブジェクトの中のキー一式を返す。"outer"オブジェクトのみ表示される。 json_object_keys('{"f1":"abc","f2":{"f3":"a", "f4":"b"}}')
 json_object_keys
------------------
 f1
 f2
json_populate_record(base anyelement, from_json json, [, use_json_as_text bool=false] anyelement from_json内のオブジェクトを行をベースで定義されたレコード型に一致する列に拡張する。変換は最善努力形式とされる。from_jsonでベースにおける列に該当しないキーを持たない列はNULLのままとなる。列が一度以上指定されると、最後の値が使用される。 select * from json_populate_record(null::x, '{"a":1,"b":2}')
 a | b
---+---
 1 | 2
json_populate_recordset(base anyelement, from_json json, [, use_json_as_text bool=false] SETOF anyelement from_jsonにおけるオブジェクトの最も外側の組み合わせをベースで定義されたレコード型に一致する列の組み合わせに拡張する。変換は最善努力形式とされる。 from_jsonでベースにおける列に該当しないキーを持たない列はNULLのままとなる。列が一度以上指定されると、最後の値が使用される。 select * from json_populate_recordset(null::x, '[{"a":1,"b":2},{"a":3,"b":4}]')
 a | b
---+---
 1 | 2
 3 | 4
 
json_array_elements(json) SETOF json JSON配列をJSON要素に拡張する。 json_array_elements('[1,true, [2,false]]')
   value
-----------
 1
 true
 [2,false]

注意: json関数と演算子は型入力関数よりもより厳格な妥当性条件を強要します。 とりわけ、Unicode基本多言語面の外側で文字を指定するためのUnicodeサロゲートペアのいかなる使用も正しいかに関してより綿密に検証します。

注意: これらの多くの関数や演算子はデータベースエンコードがUTF8の時は、JSONテキストのUnicodeのエスケープを適切なUTF8に変換します。その他のエンコードの場合、エスケープシーケンスはあるASCII文字用でなければなりません。その他のUnicodeエスケープシーケンスにおける文字コード番号はエラーを招きます。 一般的に、出来ることなら非UTF8データベースエンコードをJSONでUnicodeエスケープと混在させないことです。

注意: hstore拡張はhstoreからjsonへのキャストを含みます。 従って、変換されたhstore値は文字列値ではなくJSONオブジェクトとして示されます。

レコードの値をJSONに効率的に集約するjson_agg集約関数については 項9.20も参照してください。