PostgreSQL 9.3.2文書 | ||||
---|---|---|---|---|
前のページ | 上に戻る | 第 9章関数と演算子 | 次のページ |
表9-39はJSONデータ (項8.14を参照)と共に使用可能な演算子を示しています。
表 9-39. JSON 演算子
演算子 | 右オペランド型 | 説明 | 例 |
---|---|---|---|
-> | int | JSON 配列要素取得 | '[1,2,3]'::json->2 |
-> | text | JSON オブジェクトフィールド取得 | '{"a":1,"b":2}'::json->'b' |
->> | int | JSON 配列要素をテキストとして取得 | '[1,2,3]'::json->>2 |
->> | text | JSON オブジェクトフィールドをテキストとして取得 | '{"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も参照してください。