JSON_EXTRACT_PATH_TEXT 関数
注記
JSON_PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。
JSON_EXTRACT_PATH_TEXT を使用する代わりに、JSON_PARSE 関数 を使用して JSON 文字列を解析し、SUPER 値を取得することをお勧めします。次に、value.attribute
構文を使用する対象の要素をクエリします。SUPER 値の配列要素に対するクエリ実行の詳細については、「半構造化データのクエリ」を参照してください。
JSON_EXTRACT_PATH_TEXT 関数は、JSON 文字列内の一連のパス要素から参照されるキーと値のペアを値として返します。JSON パスは、最大 5 レベルの深さまでネストできます。パス要素では、大文字と小文字が区別されます。JSON 文字列にパス要素が存在しない場合、JSON_EXTRACT_PATH_TEXT は NULL
を返します。
null_if_invalid の引数が true
に設定され、JSON 文字列が無効になっている場合、この関数はエラーを返す代わりに NULL
を返します。
JSON_EXTRACT_PATH_TEXT のデータサイズは最大 64 KB です。JSON レコードのサイズが 64 KB を超えると、JSON_EXTRACT_PATH_TEXT での処理エラーになります。
その他の JSON 関数については、「JSON 関数」を参照してください。JSON の操作方法の詳細については、「JSON 形式からの COPY」を参照してください。
構文
JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )
引数
- json_string
-
正しくフォーマットされた JSON 文字列。
- path_elem
-
JSON 文字列内のパス要素。1 つのパス要素が必要です。パス要素は、最大 5 レベルの深さまで、追加で指定できます。
- null_if_invalid
-
(オプション) 入力 JSON 文字列が無効である場合に、エラーを返す代わりに
NULL
を返すかどうかを指定するBOOLEAN
値。JSON が無効な場合にNULL
を返すには、true
(t
) を指定します。JSON が無効な場合にエラーを返すには、false
(f
) を指定します。デフォルト:false
。
JSON 文字列では、Amazon Redshift は \n
を改行文字として、\t
をタブ文字として認識します。バックスラッシュをロードするには、バックスラッシュをバックスラッシュでエスケープします (\\
)。詳細については、「JSON のエスケープ文字」を参照してください。
戻り型
VARCHAR
-
パス要素から参照される JSON 値を表す
VARCHAR
文字列。
例
パス 'f4', 'f6'
の値を返すには、次の例を使用します。
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4', 'f6');
+------------------------+ | json_extract_path_text | +------------------------+ | star | +------------------------+
JSON が無効であるためエラーを返すには、次の例を使用します。
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6');
ERROR: invalid json object {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}
null_if_invalid を true に設定し、ステートメントがエラーを返す代わりに NULL
を返すようにするには、次の例を使用します。
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6',true);
+------------------------+ | json_extract_path_text | +------------------------+ | NULL | +------------------------+
パス 'farm', 'barn', 'color'
の値を返すには (取得される値は第 3 レベルにある)、次の例を使用します。読みやすくするために、このサンプルは JSON Lint ツールを使用してフォーマットされています。
SELECT JSON_EXTRACT_PATH_TEXT('{ "farm": { "barn": { "color": "red", "feed stocked": true } } }', 'farm', 'barn', 'color');
+------------------------+ | json_extract_path_text | +------------------------+ | red | +------------------------+
'color'
要素がないため NULL
を返すには、次の例を使用します。このサンプルは JSON Lint ツールでフォーマットされています。
SELECT JSON_EXTRACT_PATH_TEXT('{ "farm": { "barn": {} } }', 'farm', 'barn', 'color');
+------------------------+ | json_extract_path_text | +------------------------+ | NULL | +------------------------+
JSON が有効な場合、欠落している要素を抽出しようとすると NULL
が返されます。
パス 'house', 'appliances', 'washing machine', 'brand'
の値を返すには、次の例を使用します。
SELECT JSON_EXTRACT_PATH_TEXT('{ "house": { "address": { "street": "123 Any St.", "city": "Any Town", "state": "FL", "zip": "32830" }, "bathroom": { "color": "green", "shower": true }, "appliances": { "washing machine": { "brand": "Any Brand", "color": "beige" }, "dryer": { "brand": "Any Brand", "color": "white" } } } }', 'house', 'appliances', 'washing machine', 'brand');
+------------------------+ | json_extract_path_text | +------------------------+ | Any Brand | +------------------------+
次の例は、サンプルテーブルを作成し、SUPER 値を入力して、両方の行の 'f2'
パスの値を返します。
CREATE TABLE json_example(id INT, json_text SUPER); INSERT INTO json_example VALUES (1, JSON_PARSE('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}')), (2, JSON_PARSE('{ "farm": { "barn": { "color": "red", "feed stocked": true } } }')); SELECT * FROM json_example;
id | json_text ------------+-------------------------------------------- 1 | {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}} 2 | {"farm":{"barn":{"color":"red","feed stocked":true}}}
SELECT id, JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(json_text), 'f2') FROM json_example;id | json_text ------------+-------------------------------------------- 1 | {"f3":1} 2 |