すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:JSON 関数

最終更新日:Nov 09, 2025

この Topic では、AnalyticDB for MySQL クラスターでサポートされている JSON 関数について説明します。

  • JSON_ARRAY_CONTAINS: JSON 配列に value パラメーターで指定された値が含まれているかどうかを確認します。

  • JSON_ARRAY_LENGTH: JSON 配列の長さを返します。

  • JSON_CONTAINS (バージョン 3.1.5.0 以降): 指定されたパスに candidate の値が含まれているかどうかを確認します。パスが指定されていない場合、この関数はターゲットに candidate で指定された値が含まれているかどうかを確認します。

  • JSON_CONTAINS_PATH (バージョン 3.1.5.0 以降): JSON ドキュメントに指定されたパスのいずれかまたはすべてが含まれているかどうかを確認します。

  • JSON_EXTRACT: JSON ドキュメントから json_path パラメーターで指定された値を返します。

  • JSON_KEYS: json_path で指定されたパスにある JSON オブジェクトのすべてのキーを返します。json_path が指定されていない場合、この関数はルートパス (json_path='$') のすべてのキーを返します。

  • JSON_OVERLAPS (バージョン 3.1.10.6 以降): JSON ドキュメントに、candidate1candidate2candidate3 などの指定された候補要素のいずれかが含まれているかどうかを確認します。

  • JSON_REMOVE (バージョン 3.1.10.0 以降): json ドキュメントから json_path で指定された要素を削除し、新しい文字列を返します。配列に複数のパスを指定して、複数の要素を削除できます。

  • JSON_SIZE: json_path パラメーターで指定された JSON オブジェクトまたは配列のサイズを返します。

  • JSON_SET (バージョン 3.2.2.8 以降): 指定された json_pathjson ドキュメントにデータを挿入または更新し、更新された json ドキュメントを返します。

  • JSON_UNQUOTE (バージョン 3.1.5.0 以降): json_value から二重引用符を削除し、json_value 内の指定されたエスケープ文字をアンエスケープして、結果を返します。

JSON_ARRAY_CONTAINS

json_array_contains(json, value)
  • 説明: JSON 配列に指定された value が含まれているかどうかを確認します。

  • 入力値の型: value パラメーターは、数値、文字列、または BOOLEAN 型にすることができます。

  • 戻り値の型: BOOLEAN。

  • 例:

    • JSON 配列 [1, 2, 3] に値が 2 の要素が含まれているかどうかを確認します。文は次のとおりです:

      SELECT json_array_contains('[1, 2, 3]', 2);

      次の結果が返されます:

      +-------------------------------------+
      | json_array_contains('[1, 2, 3]', 2) |
      +-------------------------------------+
      |                1                    |
      +-------------------------------------+

JSON_ARRAY_LENGTH

json_array_length(json)
  • 説明: JSON 配列の長さを返します。

  • 入力値の型: STRING または JSON。

  • 戻り値の型: BIGINT。

  • 例:

    • JSON 配列 [1, 2, 3] の長さを返します。文は次のとおりです:

      SELECT json_array_length('[1, 2, 3]');

      次の結果が返されます:

      +--------------------------------+
      | json_array_length('[1, 2, 3]') |
      +--------------------------------+
      |                 3              |
      +--------------------------------+

JSON_CONTAINS

JSON_CONTAINS 関数は、JSON ドキュメントに特定のコンテンツが含まれているかどうかを確認します。クエリで JSON 配列インデックスを使用して、全表スキャンや JSON ドキュメント全体の解析を回避できます。これにより、クエリのパフォーマンスが向上します。

JSON インデックスなし

重要

この構文は、バージョン 3.1.5.0 以降の AnalyticDB for MySQL クラスターでのみサポートされています。

AnalyticDB for MySQL クラスターの マイナーバージョンを表示および更新する には、AnalyticDB for MySQL コンソール にログインし、クラスター情報 ページの 構成情報 セクションに移動します。

json_contains(target, candidate[, json_path])
  • 説明:

    • json_path が指定されている場合、この関数はパスに candidate 値が含まれているかどうかを確認します。true の場合は 1 を、false の場合は 0 を返します。

    • json_path が指定されていない場合、この関数はターゲットドキュメントに candidate 値が含まれているかどうかを確認します。true の場合は 1 を、false の場合は 0 を返します。

    次のルールが適用されます:

    • targetcandidate が両方とも NUMBER、BOOLEAN、STRING、NULL などのプリミティブ型である場合、`target` はそれらが等しい場合に `candidate` を含みます。

    • targetcandidate が両方とも JSON 配列である場合、`candidate` のすべての要素が `target` の要素でもある場合に `target` は `candidate` を含みます。

    • target が配列で candidate がそうでない場合、`candidate` が `target` の要素である場合に `target` は `candidate` を含みます。

    • targetcandidate が両方とも JSON オブジェクトである場合、`candidate` のすべてのキーが `target` にも存在し、`candidate` の各キーの値が `target` の対応する値に含まれている場合に `target` は `candidate` を含みます。

  • 入力値の型: target および candidate パラメーターは JSON 型です。json_path パラメーターは JSONPATH 型です。

  • 戻り値の型: BOOLEAN。

  • 例:

    • パス $.a に値 1 が含まれているかどうかを確認します。文は次のとおりです:

      SELECT json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '1', '$.a') as result;

      次の結果が返されます:

      +--------+
      | result |
      +--------+
      |      1 |
      +--------+
    • パス $.b に値 1 が含まれているかどうかを確認します。文は次のとおりです:

      SELECT json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '1', '$.b') as result;

      次の結果が返されます:

      +--------+
      | result |
      +--------+
      |      0 |
      +--------+
    • {"d": 4} がターゲットに含まれているかどうかを確認します。文は次のとおりです:

      SELECT json_contains(json '{"a": 1, "b": 2, "c": {"d": 4}}', json '{"d": 4}') as result;

      次の結果が返されます:

      +--------+
      | result |
      +--------+
      |      0 |
      +--------+

JSON 配列インデックスの使用

重要
  • この構文は、バージョン 3.1.10.6 以降の AnalyticDB for MySQL クラスターでのみサポートされています。

  • 指定された JSON 列に JSON 配列インデックスを作成します。詳細については、「JSON 配列インデックスの作成」をご参照ください。

  • SQL 文の前に EXPLAIN を追加して、その実行計画を表示できます。実行計画に ScanFilterProject オペレーターが含まれていない場合、JSON 配列インデックスはクエリに正常に使用されました。それ以外の場合、JSON 配列インデックスは使用されませんでした。

json_contains(json_path, cast('[candidate1,candidate2,candidate3]' as json)) 
  • 説明: JSON ドキュメントに、candidate1candidate2candidate3 などの指定されたすべての要素が含まれているかどうかを確認します。

  • 入力値の型: candidate1, candidate2, candidate3, ... の値は、数値または文字列にすることができ、すべて同じデータ型である必要があります。

  • 戻り値の型: VARCHAR。

  • 例:

    • 指定された JSON 列 vjCP-018673CP-018671 が含まれているかどうかを確認します。

      SELECT  json_contains(vj, cast('["CP-018673","CP-018671"]' AS json)) FROM json_test;

      次の結果が返されます:

      +------------------------------------------------------------+
      |json_contains(vj, cast('["CP-018673","CP-018671"]' AS json))|                                                                    |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    1                                       |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
    • 指定された JSON 列 vjCP-01867312 が含まれているかどうかを確認します。

      SELECT json_contains(vj, cast('["CP-018673",1,2]' AS json)) FROM json_test;

      次の結果が返されます:

      +------------------------------------------------------------+
      |json_contains(vj, cast('["CP-018673","CP-018671"]' AS json))|                                                                    |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    1                                       |
      +------------------------------------------------------------+
      |                    1                                       |
      +------------------------------------------------------------+
      |                    0                                       |
      +------------------------------------------------------------+
      |                    1                                       |
      +------------------------------------------------------------+

JSON_CONTAINS_PATH

json_contains_path(json, one_or_all, json_path[, json_path,...])
重要

この関数は、バージョン 3.1.5.0 以降の AnalyticDB for MySQL クラスターでのみサポートされています。

AnalyticDB for MySQL クラスターの マイナーバージョンを表示および更新する には、AnalyticDB for MySQL コンソール にログインし、クラスター情報 ページの 構成情報 セクションに移動します。

  • 説明: JSON ドキュメントに指定されたパスに値が含まれているかどうかを確認します。

    • one_or_all'one' に設定されている場合、この関数は JSON ドキュメントに指定されたパスの少なくとも 1 つが含まれている場合に 1 を返します。それ以外の場合は 0 を返します。

    • one_or_all'all' に設定されている場合、この関数は JSON ドキュメントに指定されたすべてのパスが含まれている場合に 1 を返します。それ以外の場合は 0 を返します。

  • 入力値の型: json パラメーターは JSON 型です。one_or_all パラメーターは VARCHAR 型です。有効な値は 'one' または 'all' で、大文字と小文字は区別されません。json_path パラメーターはパスです。

  • 戻り値の型: BOOLEAN。

  • 例:

    • JSON ドキュメントにパス $.a$.e の少なくとも 1 つが含まれているかどうかを確認します。文は次のとおりです:

      SELECT json_contains_path(json '{"a": 1, "b": 2, "c": {"d": 4}}', 'one', '$.a', '$.e') AS RESULT;

      次の結果が返されます:

      +--------+
      | result |
      +--------+
      |      1 |
      +--------+
    • JSON ドキュメントに $.a$.e の両方のパスが含まれているかどうかを確認します。文は次のとおりです:

      SELECT json_contains_path(json '{"a": 1, "b": 2, "c": {"d": 4}}', 'all', '$.a', '$.e') AS RESULT;

      次の結果が返されます:

      +--------+
      | result |
      +--------+
      |      0 |
      +--------+

JSON_EXTRACT

重要
  • JSON_EXTRACT 関数の戻り値は、JSON 型の列と同様に ORDER BY をサポートしていません。

  • JSON_EXTRACT 関数を JSON_UNQUOTE 関数とともに使用する場合、JSON_UNQUOTE 関数の入力パラメーターとして使用する前に、まず CAST AS VARCHAR を使用して JSON_EXTRACT の戻り値を VARCHAR 型に変換する必要があります。

json_extract(json, json_path)
  • 説明: JSON ドキュメントから json_path で指定された値を返します。json のキーに $. などの特殊文字が含まれている場合、json_path のフォーマットは '$["Key"]' である必要があります。

    たとえば、キーが $data の場合、`json_path` を '$["$data"]' として指定します。

  • 入力値の型: STRING または JSON。

  • 戻り値の型: JSON。

  • 例:

    • 配列 [10, 20, [30, 40]] からパス `$[0]` の値を返します。文は次のとおりです:

      SELECT json_extract('[10, 20, [30, 40]]', '$[0]');

      次の結果が返されます:

      +-------------------------------------------+
      | json_extract('[10, 20, [30, 40]]', '$[0]') |
      +-------------------------------------------+
      |                     10                    |
      +-------------------------------------------+
    • {"id":"1","$date":"12345"} から `$date` パスの値を返します。文は次のとおりです:

      SELECT JSON_EXTRACT('{"id":"1","$date":"12345"}', '$["$date"]');

      次の結果が返されます:

      +---------------------------------------------------------+
      |JSON_EXTRACT('{"id":"1","$date":"12345"}', '$["$date"]') |
      +---------------------------------------------------------+
      |                       "12345"                           |
      +---------------------------------------------------------+

JSON_KEYS

json_keys(json[, json_path])
  • 説明

    • json_path が指定されている場合、この関数はそのパスにある JSON オブジェクトからすべてのキーを返します。

    • json_path が指定されていない場合、この関数はルートオブジェクトからすべてのキーを返します。これは json_path='$' と同等です。

  • 入力値の型: JSON 型のパラメーターのみがサポートされています。

    次の方法で JSON データを構築できます:

    • JSON データを直接使用します。例: json '{"a": 1, "b": {"c": 30}}'

    • CAST 関数を使用して、文字列を明示的に JSON データに変換します。例: CAST('{"a": 1, "b": {"c": 30}}' AS json)

  • 戻り値の型: JSON 配列。

  • 例:

    • $.b パスのすべてのキーを返します。文は次のとおりです:

      SELECT json_keys(CAST('{"a": 1, "b": {"c": 30}}' AS json),'$.b');

      次の結果が返されます:

      +-----------------------------------------------------------+
      | json_keys(CAST('{"a": 1, "b": {"c": 30}}' AS json),'$.b') |
      +-----------------------------------------------------------+
      |                           ["c"]                           |
      +-----------------------------------------------------------+
    • ルートパスのすべてのキーを返します。文は次のとおりです:

      SELECT JSON_KEYS(json '{"a": 1, "b": {"c": 30}}');

      次の結果が返されます:

      +--------------------------------------------+
      | JSON_KEYS(json '{"a": 1, "b": {"c": 30}}') |
      +--------------------------------------------+
      |             ["a","b"]                      |
      +--------------------------------------------+

JSON_OVERLAPS

重要
  • この構文は、バージョン 3.1.10.6 以降の AnalyticDB for MySQL クラスターでのみサポートされています。

  • 指定された JSON 列に JSON 配列インデックスを作成します。詳細については、「JSON 配列インデックスの作成」をご参照ください。

  • SQL 文の前に EXPLAIN を追加して、その実行計画を表示できます。実行計画に ScanFilterProject オペレーターが含まれていない場合、JSON 配列インデックスはクエリに正常に使用されました。それ以外の場合、JSON 配列インデックスは使用されませんでした。

json_overlaps(json, cast('[candidate1,candidate2,candidate]' as json)) 
  • 説明: JSON ドキュメントに、candidate1candidate2candidate3 などの指定された要素のいずれかが含まれているかどうかを確認します。

  • 入力値の型: candidate1, candidate2, candidate3, ... パラメーターは、数値または文字列の値を受け入れます。すべての値は同じデータ型である必要があります。

  • 戻り値の型: VARCHAR。

  • 例:

    • 指定された JSON 列 vj から CP-018673 を含むデータを返します。

      SELECT * FROM json_test WHERE json_overlaps(vj, cast('["CP-018673"]' AS json));

      次の結果が返されます:

      +-----+----------------------------------------------------------------------------+
      |  id |   vj                                                                       |
      +-----+----------------------------------------------------------------------------+
      |  2  | ["CP-018673", 1, false]                                                    |
      +-----+----------------------------------------------------------------------------+
      |  3  | ["CP-018673", 1, false, {"a": 1}]                                          |
      +-----+----------------------------------------------------------------------------+
      |  5  | ["CP-018673","CP-018671","CP-018672","CP-018670","CP-018669","CP-018668"]  |
      +-----+----------------------------------------------------------------------------+
    • 指定された JSON 列 vj から、要素 12、または 3 のいずれかを含むデータを返します。

      SELECT * FROM json_test WHERE json_overlaps(vj, cast('[1,2,3]' AS json))

      次の結果が返されます:

      +-----+-------------------------------------+
      |  id |                 vj                  |
      +-----+-------------------------------------+
      |  1  | [1,2,3]                             |
      +-----+-------------------------------------+
      |  2  | ["CP-018673", 1, false]             |
      +-----+-------------------------------------+
      |  3  | ["CP-018673", 1, false, {"a": 1}]   |
      +-----+-------------------------------------+

JSON_REMOVE

重要

JSON_REMOVE 関数は、バージョン 3.1.10.0 以降の AnalyticDB for MySQL クラスターでのみサポートされています。

AnalyticDB for MySQL クラスターの マイナーバージョンを表示および更新する には、AnalyticDB for MySQL コンソール にログインし、クラスター情報 ページの 構成情報 セクションに移動します。

json_remove(json,json_path)
json_remove(json,array[json_path,json_path,...])
  • 説明: json ドキュメントから json_path で指定された 1 つ以上の要素を削除し、新しい文字列を返します。`array[json_path, json_path, ...]` のように配列に複数のパスを指定して、複数の要素を削除できます。

  • 入力値の型: json パラメーターは JSON フォーマットの VARCHAR 文字列です。json_path パラメーターは JSON フォーマットの VARCHAR 文字列です。

  • 戻り値の型: VARCHAR。

    • パス $.glossary.GlossDiv の部分を削除し、変更された文字列を返します。文は次のとおりです:

        SELECT json_remove(
        '{
            "glossary": {
                "title": "example glossary",
                "GlossDiv": {
                    "title": "S",
                    "GlossList": {
                        "GlossEntry": {
                            "ID": "SGML",
                            "SortAs": "SGML",
                            "GlossTerm": "Standard Generalized Markup Language",
                            "Acronym": "SGML",
                            "Abbrev": "ISO 8879:1986",
                            "GlossDef": {
                                "para": "A meta-markup language, used to create markup languages such as DocBook.",
                                "GlossSeeAlso": ["GML", "XML"]
                            },
                            "GlossSee": "markup"
                        }
                    }
                }
            }
        }'
        , '$.glossary.GlossDiv') a;

      次の結果が返されます:

      {"glossary":{"title":"example glossary"}}
    • パス $.glossary.title$.glossary.GlossDiv.title の部分を削除し、変更された文字列を返します。文は次のとおりです:

      SELECT json_remove(
        '{
            "glossary": {
                "title": "example glossary",
                "GlossDiv": {
                    "title": "S",
                    "GlossList": {
                        "GlossEntry": {
                            "ID": "SGML",
                            "SortAs": "SGML",
                            "GlossTerm": "Standard Generalized Markup Language",
                            "Acronym": "SGML",
                            "Abbrev": "ISO 8879:1986",
                            "GlossDef": {
                                "para": "A meta-markup language, used to create markup languages such as DocBook.",
                                "GlossSeeAlso": ["GML", "XML"]
                            },
                            "GlossSee": "markup"
                        }
                    }
                }
            }
        }'
        , array['$.glossary.title', '$.glossary.GlossDiv.title']) a;

      次の結果が返されます:

      {"glossary":{"GlossDiv":{"GlossList":{"GlossEntry":{"GlossTerm":"Standard Generalized Markup Language","GlossSee":"markup","SortAs":"SGML","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"ID":"SGML","Acronym":"SGML","Abbrev":"ISO 8879:1986"}}}}}

JSON_SIZE

json_size(json, json_path)
  • 説明: json_path で指定された JSON オブジェクトまたは JSON 配列のサイズを返します。

    説明

    この関数は、json_path が JSON オブジェクトまたは JSON 配列を指していない場合、0 を返します。

  • 入力値の型: STRING または JSON。

  • 戻り値の型: BIGINT。

  • 例:

    • json_path は JSON オブジェクトを指します。文は次のとおりです:

      SELECT json_size('{"x":{"a":1, "b": 2}}', '$.x') as result;

      次の結果が返されます:

      +--------+
      | result |
      +--------+
      |      2 |
      +--------+
    • json_path は JSON オブジェクトまたは JSON 配列を指していません。文は次のとおりです:

      SELECT json_size('{"x": {"a": 1, "b": 2}}', '$.x.a') as result;

      次の結果が返されます:

      +--------+
      | result |
      +--------+
      |      0 |
      +--------+

JSON_SET

重要

JSON_SET 関数は、バージョン 3.2.2.8 以降の AnalyticDB for MySQL クラスターでのみサポートされています。

AnalyticDB for MySQL クラスターの マイナーバージョンを表示および更新する には、AnalyticDB for MySQL コンソール にログインし、クラスター情報 ページの 構成情報 セクションに移動します。

json_set(json, json_path, value[, json_path, value] ...)
  • 説明: 指定された json_pathjson ドキュメントにデータを挿入または更新し、更新された json ドキュメントを返します。

    • json または json_path パラメーターが null の場合、この関数は null を返します。

    • json が有効な JSON ドキュメントでない場合、またはいずれかの json_path が有効なパス式でない場合は、例外がスローされます。

    • 指定された json_path が存在する場合、その値は新しい value で上書きされます。

    • 指定された json_pathjson に存在しない場合:

      • json_path が JSON オブジェクトを指している場合、valuejson_path で指定された場所に新しい要素として追加されます。

      • json_path が JSON 配列を指している場合、この関数は json_path で指定された位置の前に空のスロットがあるかどうかを確認します。空のスロットが存在する場合、value が挿入される前に `null` 値で埋められます。それ以外の場合、value は直接挿入されます。

      • その他の場合は例外がスローされます。

  • 入力値の型:

    • json: VARCHAR または JSON。

    • json_path: VARCHAR。

    • value: BOOLEAN、TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、VARCHAR、VARBINARY、DATE、DATETIME、TIMESTAMP、または TIME。

  • 戻り値の型: JSON。

  • 例:

    • json_path が null の json ドキュメントにデータを挿入します。

      SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', null, '10');

      結果:

      +------------------------------------------------+
      | JSON_SET('{ "a": 1, "b": [2, 3]}', NULL, '10') |
      +------------------------------------------------+
      | null                                           |
      +------------------------------------------------+
    • json_path が有効なパス式でない json ドキュメントにデータを挿入します。

      SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', '$.b.c', '10');

      結果:

      Failed to execute json_set() for json_path: $.b.c
    • json ドキュメントにデータを挿入します。パス json_path1 は存在しますが、json_path2 は存在せず、JSON オブジェクトを指しています。

      SELECT JSON_SET('{ "a": 1, "b": [2, 3]}', '$.a', 10, '$.c', '[true, false]');

      結果:

      +-----------------------------------------------------------------------+
      | JSON_SET('{ "a": 1, "b": [2, 3]}', '$.a', 10, '$.c', '[true, false]') |
      +-----------------------------------------------------------------------+
      | {"a":10,"b":[2,3],"c":"[true, false]"}                                |
      +-----------------------------------------------------------------------+
    • json ドキュメントにデータを挿入します。指定された json_path は存在せず、JSON 配列を指しています。

      SELECT JSON_SET('{ "a": 1, "b": [2, 3]}',  '$.b[4]', '[true, false]');

      結果:

      +----------------------------------------------------------------+
      | JSON_SET('{ "a": 1, "b": [2, 3]}',  '$.b[4]', '[true, false]') |
      +----------------------------------------------------------------+
      | {"a":1,"b":[2,3,null,null,"[true, false]"]}                    |
      +----------------------------------------------------------------+

JSON_UNQUOTE

json_unquote(json_value)
重要

この関数は、バージョン 3.1.5.0 以降の AnalyticDB for MySQL クラスターでのみサポートされています。

AnalyticDB for MySQL クラスターの マイナーバージョンを表示および更新する には、AnalyticDB for MySQL コンソール にログインし、クラスター情報 ページの 構成情報 セクションに移動します。

  • 説明: json_value の引用符を解除し、外側の二重引用符を削除し、値内の特定の文字をアンエスケープして、結果を返します。

    AnalyticDB for MySQLjson_value パラメーターを検証しません。json_value パラメーターは、パラメーターが JSON 構文に準拠しているかどうかに関係なく、前述のロジックに基づいて処理されます。

    次の表に、サポートされているエスケープ文字を示します。

    エスケープ前

    エスケープ後

    \"

    二重引用符 (")。

    \b

    バックスペース。

    \f

    フォームフィード。

    \n

    ラインフィード。

    \r

    キャリッジリターン。

    \t

    タブ。

    \\

    バックスラッシュ (\)。

    \uXXXX

    UTF-8 文字表現。

  • 入力値の型: VARCHAR。

  • 戻り値の型: VARCHAR。

  • 例:

    • 引用符を解除した文字列 abc を返します。文は次のとおりです:

      SELECT json_unquote('"abc"');

      次の結果が返されます:

      +-----------------------+
      | json_unquote('"abc"') |
      +-----------------------+
      |          abc          |
      +-----------------------+
    • 引用符を解除し、解析された文字列を返します。文は次のとおりです:

      SELECT json_unquote('"\\t\\u0032"');

      次の結果が返されます:

      +------------------------------+
      | json_unquote('"\\t\\u0032"') |
      +------------------------------+
      |               2              |
      +------------------------------+

付録: JSON パス構文

使用法

  • $.keyName[.keyName]... を使用して、JSON オブジェクト内の指定されたキーにアクセスします。

  • $[nonNegativeInteger] を使用して、JSON 配列の n 番目の要素にアクセスします。ここで、n は非負の整数です。

  • $.keyName[.keyName]...[nonNegativeInteger] を使用して、JSON オブジェクト内のネストされた JSON 配列の n 番目の要素にアクセスします。ここで、n は非負の整数です。

注意

AnalyticDB for MySQL の JSON パス構文は、ワイルドカード文字 * および ** をサポートしていません。たとえば、式 '$.*''$.hobbies[*]''$.address.**'、および '$.hobbies.**' はサポートされていません。

次の JSON データがあると仮定します。

{
    "name": "Alice",
    "age": 25,
    "address": {
        "city": "Hangzhou",
        "zip": "10001"
    },
    "hobbies":["reading", "swimming", "cycling"]
}

説明

正しい例

誤った例

name キーの値にアクセスする

$.name

name

ネストされたオブジェクトの city キーの値にアクセスする

$.address.city

$.address[0]

hobbies JSON 配列の最初の要素にアクセスする

$.hobbies[0]

$.hobbies.[0]

よくある質問

JSON_OVERLAPS 関数の使用時に java.lang.NullPointerException エラーを解決するにはどうすればよいですか?

原因: このエラーは、ALTER 文を使用して JSON インデックスを作成した後に BUILD 操作が実行されなかったか、BUILD 操作が完了していないために発生します。この場合、JSON インデックスは有効になっていません。

ソリューション:

  • BUILD タスクが実行されなかった場合:

    AnalyticDB for MySQL クラスターは、特定の条件が満たされた後、BUILD タスクを自動的にトリガーします。また、BUILD タスクを手動でトリガーすることもできます。

  • BUILD タスクが実行された場合:

    次の文を実行して、BUILD タスクのステータスをクエリします。status フィールドの値が FINISH の場合、BUILD 操作は完了です。

    SELECT table_name, schema_name, status FROM INFORMATION_SCHEMA.KEPLER_META_BUILD_TASK ORDER BY create_time DESC LIMIT 10;

BUILD の詳細については、「BUILD」をご参照ください。

リファレンス

  • JSON: JSON 型について学びます。

  • JSON インデックス: JSON オブジェクトまたは JSON 配列のインデックスを作成する方法を学びます。