JSON_EXTRACT_ARRAY_ELEMENT_TEXT 関数
注記
JSON_PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。
JSON_EXTRACT_ARRAY_ELEMENT_TEXT を使用する代わりに、JSON_PARSE 関数 を使用して JSON 文字列を解析し、SUPER 値を取得することをお勧めします。次に、value[element position]
構文を使用し、必要とする配列インデックスが含まれている要素をクエリします。SUPER 値の配列要素に対するクエリ実行の詳細については、「半構造化データのクエリ」を参照してください。
JSON_EXTRACT_ARRAY_ELEMENT_TEXT 関数は、JSON 文字列の最外部の配列内の JSON 配列要素 (0 から始まるインデックスを使用) を返します。配列内の最初の要素の位置は 0 です。インデックスが負または範囲外である場合、JSON_EXTRACT_ARRAY_ELEMENT_TEXT は NULL
文字列を返します。null_if_invalid の引数が TRUE
に設定され、JSON 文字列が無効になっている場合、この関数はエラーを返す代わりに NULL
を返します。
詳細については、「JSON 関数」を参照してください。
構文
JSON_EXTRACT_ARRAY_ELEMENT_TEXT('json string', pos [, null_if_invalid ] )
引数
- json_string
-
正しくフォーマットされた JSON 文字列。
- pos
-
返される配列要素のインデックスを表す
INTEGER
(0 から始まる配列インデックスを使用)。
- null_if_invalid
-
(オプション) 入力 JSON 文字列が無効である場合に、エラーを返す代わりに
NULL
を返すかどうかを指定するBOOLEAN
値。JSON が無効な場合にNULL
を返すには、true
(t
) を指定します。JSON が無効な場合にエラーを返すには、false
(f
) を指定します。デフォルトはfalse
です。
戻り型
VARCHAR
-
pos によって参照される JSON 配列要素を表す
VARCHAR
文字列。
例
配列の位置 2 の要素 (0 から始まる配列インデックスの 3 番目の要素) を返すには、次の例を使用します。
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('[111,112,113]', 2);
+---------------------------------+
| json_extract_array_element_text |
+---------------------------------+
| 113 |
+---------------------------------+
JSON が無効であるためエラーを返すには、次の例を使用します。
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('["a",["b",1,["c",2,3,null,]]]',1);
ERROR: invalid json array object ["a",["b",1,["c",2,3,null,]]]
null_if_invalid を true に設定し、ステートメントが無効な JSON のエラーを返す代わりに NULL
を返すようにするには、次の例を使用します。
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('["a",["b",1,["c",2,3,null,]]]',1,true);
+---------------------------------+
| json_extract_array_element_text |
+---------------------------------+
| NULL |
+---------------------------------+
次のステートメントサンプルについて考えてみます。指定された JSON 文字列またはインデックスが NULL の場合、JSON_EXTRACT_ARRAY_ELEMENT_TEXT は他のパラメータの値を問わず、NULL を返します。
--Statement where json_string is NULL.
SELECT json_extract_array_element_text(NULL, 0)
json_extract_array_element_text
---------------------------------
NULL
--Statement where pos is NULL and json_string is invalid JSON.
SELECT json_extract_array_element_text('invalid_json', NULL);
json_extract_array_element_text
---------------------------------
NULL
--Statement where json_string is NULL and null_if_invalid is FALSE.
SELECT json_extract_array_element_text(NULL, 0, FALSE);
json_extract_array_element_text
---------------------------------
NULL
次のステートメントサンプルについて考えてみます。null_if_invalid が TRUE の場合、json_string が無効な JSON であれば、JSON_EXTRACT_ARRAY_ELEMENT_TEXT は NULL を返します。null_if_invalid が FALSE であったり、設定されていなかったりする場合、json_string が無効であれば、この関数はエラーを返します。
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_array_element_text('invalid_json', 0, TRUE);
json_extract_array_element_text
---------------------------------
NULL
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_array_element_text('invalid_json', 0);
ERROR: JSON parsing error
json_string が有効な JSON で、pos が JSON null
値を参照する、次の例について考えてみます。この場合、JSON_EXTRACT_ARRAY_ELEMENT_TEXT は、null_if_invalid の値を問わず、NULL を返します。
--Statement selecting a null value.
SELECT json_extract_array_element_text('[null]', 0);
json_extract_array_element_text
----------------------------------
NULL