

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# JSON\$1EXTRACT\$1PATH\$1TEXT 関数
<a name="JSON_EXTRACT_PATH_TEXT"></a>

**注記**  
JSON\$1PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。  
JSON\$1EXTRACT\$1PATH\$1TEXT を使用する代わりに、[JSON\$1PARSE 関数](JSON_PARSE.md) を使用して JSON 文字列を解析し、SUPER 値を取得することをお勧めします。次に、`value.attribute` 構文を使用する対象の要素をクエリします。SUPER 値の配列要素に対するクエリ実行の詳細については、「[半構造化データのクエリ](query-super.md)」を参照してください。

JSON\$1EXTRACT\$1PATH\$1TEXT 関数は、JSON 文字列内の一連のパス要素から参照されるキーと値のペアを値として返します。JSON パスは、最大 5 レベルの深さまでネストできます。パス要素では、大文字と小文字が区別されます。JSON 文字列にパス要素が存在しない場合、JSON\$1EXTRACT\$1PATH\$1TEXT は `NULL` を返します。

*null\$1if\$1invalid* の引数が `TRUE` に設定され、JSON 文字列が無効になっている場合、この関数はエラーを返す代わりに `NULL` を返します。

JSON\$1EXTRACT\$1PATH\$1TEXT のデータサイズは最大 64 KB です。JSON レコードのサイズが 64 KB を超えると、JSON\$1EXTRACT\$1PATH\$1TEXT での処理エラーになります。

その他の JSON 関数については、「[JSON 関数](json-functions.md)」を参照してください。JSON の操作方法の詳細については、「[JSON 形式からの COPY](copy-usage_notes-copy-from-json.md)」を参照してください。

## 構文
<a name="JSON_EXTRACT_PATH_TEXT-synopsis"></a>

```
JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )
```

## 引数
<a name="JSON_EXTRACT_PATH_TEXT-arguments"></a>

 *json\$1string*  
正しくフォーマットされた JSON 文字列。

*path\$1elem*  
JSON 文字列内のパス要素。1 つのパス要素が必要です。パス要素は、最大 5 レベルの深さまで、追加で指定できます。

*null\$1if\$1invalid*  
(オプション) 入力 JSON 文字列が無効である場合に、エラーを返す代わりに `NULL` を返すかどうかを指定する `BOOLEAN` 値。JSON が無効な場合に `NULL` を返すには、`TRUE` (`t`) を指定します。JSON が無効な場合にエラーを返すには、`FALSE` (`f`) を指定します。デフォルトは `FALSE` です。

JSON 文字列では、Amazon Redshift は `\n` を改行文字として、`\t` をタブ文字として認識します。バックスラッシュをロードするには、バックスラッシュをバックスラッシュでエスケープします (`\\`)。詳細については、「[JSON のエスケープ文字](copy-usage_notes-copy-from-json.md#copy-usage-json-escape-characters)」を参照してください。

## 戻り型
<a name="JSON_EXTRACT_PATH_TEXT-return"></a>

`VARCHAR`  
パス要素から参照される JSON 値を表す `VARCHAR` 文字列。

## 例
<a name="JSON_EXTRACT_PATH_TEXT-examples"></a>

パス `'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\$1if\$1invalid* を *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           |
```

次のステートメントサンプルについて考えてみます。指定された *path\$1elem* が NULL であるため、JSON\$1EXTRACT\$1PATH\$1TEXT は他のパラメータの値を問わず、NULL を返します。

```
--Statement where path_elem is NULL and json_string is valid JSON.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}',NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where only one path_elem is NULL.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4',NULL);

 json_extract_path_text
------------------------
                   NULL
                   
--Statement where path_elem is NULL and json_string is invalid JSON.
SELECT json_extract_path_text('invalid_json', NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where path_elem is NULL and null_if_invalid is FALSE.
SELECT json_extract_path_text(NULL, 0, FALSE);

 json_extract_path_text
------------------------
                   NULL
```

次のステートメントサンプルについて考えてみます。*null\$1if\$1invalid* が TRUE の場合、*json\$1string* が無効な JSON であれば、JSON\$1EXTRACT\$1PATH\$1TEXT は NULL を返します。*null\$1if\$1invalid* が FALSE であったり、設定されていなかったりする場合、*json\$1string* が無効であれば、この関数はエラーを返します。

```
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_path_text('invalid_json', 0, TRUE);

 json_extract_path_text
------------------------
                   NULL
                                                    
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_path_text('invalid_json', 0, FALSE);

ERROR:  JSON parsing error
```

*json\$1string* が有効な JSON で、*path\$1elem* が JSON `null` 値を参照する、次の例について考えてみます。この場合、JSON\$1EXTRACT\$1PATH\$1TEXT は NULL を返します。同様に、*path\$1elem* が存在しない値を参照する場合、JSON\$1EXTRACT\$1PATH\$1TEXT は *null\$1if\$1invalid* の値を問わず、NULL を返します。

```
--Statement selecting a null value.
SELECT json_extract_path_text('[null]', 0);

  json_extract_path_text  
-------------------------
                    NULL   
                             
--Statement selecting a non-existing value.               
SELECT json_extract_path_text('{}', 'a');
       
  json_extract_path_text  
-------------------------
                    NULL
```