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

PolarDB:JSON 関数

最終更新日:Jun 05, 2024

このトピックでは、PolarDB-XでサポートされているJSON関数について説明します。

概要

PolarDB-Xは、MySQL 5.7でサポートされているすべてのJSON関数をサポートします。 次の表は、関数を5つのカテゴリに分けています。 詳細については、「JSON関数」をご参照ください。

カテゴリ関数
JSON値を作成する関数JSON_ARRAY
JSON_オブジェクト
JSON_QUOTE
JSON値を検索する関数JSON_コンテナ
JSON_CONTAINS_パス
JSON_EXTRACT
->
->>
JSON_KEYS
JSON_SEARCH
JSON値を変更する関数JSON_APPEND
JSON_ARRAY_APPEND
JSON_ARRAY_INSERT
JSON_INSERT
JSON_MERGE
JSON_MERGE_パッチ
JSON_MERGE_PRESERVE
JSON_REMOVE
JSON_REPLACE
JSON_SET
JSON_UNQUOTE
JSON値の属性を返す関数JSON_深さ
JSON_長さ
JSON_TYPE
JSON_VALID
JSONユーティリティ関数JSON_PRETTY
JSON_STORAGE_サイズ

JSON_ARRAY([val [, val] ...])

  • 説明: この関数は値のリストを評価し、これらすべての値を含むJSON配列を返します。
  • サンプルコード:
    JSON_ARRAY(123, "polardb-x", NULL, TRUE);
    + ------------------------------------------ +
    | JSON_ARRAY(123, 'polardb-x', NULL, true) |
    + ------------------------------------------ +
    | [123,"polardb-x",null,true] |
    + ------------------------------------------ + 

JSON_OBJECT([key, val [, key, val] ...])

  • 説明: この関数は、キーと値のペアのリストを評価し、これらすべてのキーと値のペアを含むJSONオブジェクトを返します。 キーの名前がNULLの場合、または引数の数が奇数の場合はエラーが返されます。
  • サンプルコード:
    JSON_OBJECT('id', 123, 'name', 'polardb-x');
    + --------------------------------------------- +
    | JSON_OBJECT('id', 123, 'name', 'polardb-x') |
    + --------------------------------------------- +
    | {"name":"polardb-x","id":123} |
    + --------------------------------------------- + 

JSON_QUOTE (文字列)

  • 説明: この関数は、文字列をJSON値として二重引用符 ("") のペアで囲み、特殊文字をエスケープし、結果としてutf8mb4文字列を返します。 引数がNULLの場合、この関数はNULLを返します。 この関数は、有効なJSON文字列リテラルを生成するためによく使用されます。
  • サンプルコード:
    JSON_QUOTE(null), JSON_QUOTE('"abc"');
    + ------------------ + --------------------- +
    | JSON_QUOTE(NULL) | JSON_QUOTE('"abc"') |
    + ------------------ + --------------------- +
    | NULL | "abc" "|
    + ------------------ + --------------------- + 

JSON_CONTAINS(target, candidate [, path])

  • 説明: この関数は、候補JSONドキュメントがターゲットJSONドキュメントに含まれているかどうかを示す1または0を返します。 path引数が指定されている場合、関数は1または0を返し、対象のJSONドキュメントのパスにJSONドキュメントの候補があるかどうかを示します。 JSONドキュメントの候補に1つ以上のパスのデータが含まれているかどうかのみを確認するには、JSON_CONTAINS_PATH() 関数を使用します。 詳細については、「JSONドキュメント」をご参照ください。
  • サンプルコード:
    SET @ json_doc = '{"a": 123、"b": null、"c": {"d": 456}}';
    SELECT JSON_CONTAINS(@ json_doc、'123' 、'$.a');
    + ---------------------------------------- +
    | JSON_CONTAINS(@ json_doc、'123' 、'$.a') |
    + ---------------------------------------- +
    | 1 |
    + ---------------------------------------- +
    SELECT JSON_CONTAINS(@ json_doc, 'null', '$.b');
    + ----------------------------------------- +
    | JSON_CONTAINS(@ json_doc、'null' 、'$.b') |
    + ----------------------------------------- +
    | 1 |
    + ----------------------------------------- +
    SELECT JSON_CONTAINS(@ json_doc、'123' 、'$.b');
    + ---------------------------------------- +
    | JSON_CONTAINS(@ json_doc、'123' 、'$.b') |
    + ---------------------------------------- +
    | 0 |
    + ---------------------------------------- +
    SELECT JSON_CONTAINS(@ json_doc, '{"d": 456}', '$.c');
    + ----------------------------------------------- +
    | JSON_CONTAINS(@ json_doc, '{"d": 456}', '$.c') |
    + ----------------------------------------------- +
    | 1 |
    + ----------------------------------------------- + 

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

  • この関数は、json_docドキュメントに1つ以上の指定されたパスのデータが含まれているかどうかを示す1または0を返します。 one_or_all引数の有効な値:
    • 'one': この関数は、パス引数で指定された1つ以上のパスのデータがjson_docドキュメントに含まれている場合、1を返します。 関数は他の条件で0を返します。
    • 'all': この関数は、パス引数で指定されたすべてのパスのデータがjson_docドキュメントに含まれている場合、1を返します。 関数は他の条件で0を返します。
  • サンプルコード:
    SET @ json_doc = '{"a": 123、"b": null、"c": {"d": 456}}';
    SELECT JSON_CONTAINS_PATH(@ json_doc、'one' 、'$.a' 、'$.e');
    + ---------------------------------------------------- +
    | JSON_CONTAINS_PATH(@ json_doc、'one' 、'$.a' 、'$.e') |
    + ---------------------------------------------------- +
    | 1 |
    + ---------------------------------------------------- +
    SELECT JSON_CONTAINS_PATH(@ json_doc, 'all', '$.a', '$.e');
    + ---------------------------------------------------- +
    | JSON_CONTAINS_PATH(@ json_doc、'all' 、'$.a' 、'$.e') |
    + ---------------------------------------------------- +
    | 0 |
    + ---------------------------------------------------- +
    SELECT JSON_CONTAINS_PATH(@ json_doc, 'one', '$.c.d');
    + ----------------------------------------------- +
    | JSON_CONTAINS_PATH(@ json_doc、'one' 、'$.c.d') |
    + ----------------------------------------------- +
    | 1 |
    + ----------------------------------------------- + 

JSON_EXTRACT(json_doc, path[, path] ...)

  • 説明: この関数は、JSONドキュメントのパス引数と一致する値を返します。
  • サンプルコード:
    JSON_EXTRACT('[123, 456, [789, 1000]]', '$[1]');
    + ------------------------------------------------- +
    | JSON_EXTRACT('[123, 456, [789, 1000]]]', '$[1]') |
    + ------------------------------------------------- +
    | 456 |
    + ------------------------------------------------- +
    SELECT JSON_EXTRACT('[123, 456, [789, 1000]]]', '$[0]', '$[1]');
    + --------------------------------------------------------- +
    | JSON_EXTRACT('[123, 456, [789, 1000]]]', '$[0]', '$[1]') |
    + --------------------------------------------------------- +
    | [123,456] |
    + --------------------------------------------------------- +
    SELECT JSON_EXTRACT('[123, 456, [789, 1000]]]', '$[0]', '$[2]');
    + --------------------------------------------------------- +
    | JSON_EXTRACT('[123, 456, [789, 1000]]]', '$[0]', '$[2]') |
    + --------------------------------------------------------- +
    | [123、[789,1000]] |
    + --------------------------------------------------------- + 

列-> パス

  • 説明:-> 演算子は、JSON_EXTRACT() 関数と同じように機能し、パス引数に基づいて列の値を返します。
  • サンプルコード:
    JSON_OBJECT('id', 'name', 'polardb-x')->"$.name" as NAME; 123
    + ------------
    | 名前 |
    + ------------
    | "polardb-x" |
    + ------------ 

列->> パス

  • 説明:->> 演算子は、-> 演算子と比較して改善された演算子です。 ->> 演算子は、戻り値の引用を解除し、エスケープを解除します。 詳細については、「JSON_UNQUOTE」をご参照ください。 ->> 演算子は、次の関数式と同じように機能します。
    • JSON_UNQUOTE( JSON_EXTRACT (列、パス))
    • JSON_UNQUOTE (列-> パス)
  • サンプルコード:
    JSON_OBJECT('id', 'name', 'polardb-x')->"$.name" as NAME; 123
    + ------------
    | 名前 |
    + ------------
    | "polardb-x" |
    + ------------ 

JSON_KEYS(json_doc[, path])

  • 説明: この関数は、json_docオブジェクトのトップレベル値からJSON配列としてキーを返します。
  • サンプルコード:
    JSON_KEYS('{"a": 123, "b": {"c": 456}}');
    + ------------------------------------------ +
    | JSON_KEYS('{"a": 123, "b": {"c": 456}}') |
    + ------------------------------------------ +
    | ["a","b"] |
    + ------------------------------------------ + 

JSON_SEARCH(json_doc, one_or_all, search_str [, escape_char[, path] ...])

  • この関数は、json_docドキュメント内のsearch_str文字列への1つ以上のパスを返します。 パスが見つからない場合、関数はNULLを返します。 search_str文字列は、ファジーマッチのワイルドカードをサポートします。 サポートされているワイルドカードには、LIKE演算子と組み合わせて使用されるパーセント記号 (%) とアンダースコア (_) が含まれます。 escape_char引数はエスケープ文字を指定します。 one_or_all引数の有効な値:
    • 'one': この関数は、search_str文字列が見つかった最初のパスを返します。 最初に戻るパスと見なされるパスは未定義です。
    • 'all': この関数は、search_str文字列が見つかったすべてのパスを返します。 配列内の要素の順序は未定義です。
      説明 PolarDB-Xでは、パスに二重アスタリスク (**) ワイルドカードを使用することはできません。
  • サンプルコード:
    SET @ json_doc = '["abc", [{"k1": 123}, "def"], {"k2": "abc"}, {"k3": null}]';
    SELECT JSON_SEARCH(@ json_doc、'one' 、'abc');
    + -------------------------------------- +
    | JSON_SEARCH(@ json_doc、'one' 、'abc') |
    + -------------------------------------- +
    | "$[0]" |
    + -------------------------------------- +
    SELECT JSON_SEARCH(@ json_doc, 'all', 'abc');
    + -------------------------------------- +
    | JSON_SEARCH(@ json_doc、'all' 、'abc') |
    + -------------------------------------- +
    | ["$[0]","$[2].k2"] |
    + -------------------------------------- +
    SELECT JSON_SEARCH(@ json_doc, 'all', 'xyz');
    + -------------------------------------- +
    | JSON_SEARCH(@ json_doc、'all' 、'xyz') |
    + -------------------------------------- +
    | NULL |
    + -------------------------------------- +
    SELECT JSON_SEARCH(@ json_doc, 'all', 'def', NULL, '$[*]');
    + ---------------------------------------------------- +
    | JSON_SEARCH(@ json_doc、'all' 、'def' 、NULL、'$[*]') |
    + ---------------------------------------------------- +
    | "$[1][1]" |
    + ---------------------------------------------------- +
    SELECT JSON_SEARCH(@ json_doc, 'all', '% a %');
    + -------------------------------------- +
    | JSON_SEARCH(@ json_doc, 'all', '% a %') |
    + -------------------------------------- +
    | ["$[0]","$[2].k2"] |
    + -------------------------------------- + 

JSON_APPEND(json_doc, path, val [, path, val] ...)

この関数の名前はJSON_ARRAY_APPEND() に変更されます。 詳細については、「JSON_ARRAY_APPEND」をご参照ください。
説明 この関数はMySQL 5.7では廃止され、MySQL 8.0では削除されます。

JSON_ARRAY_APPEND(json_doc, path, val [, path, val] ...)

  • 説明: この関数は、json_docドキュメントのJSON配列の末尾に値を追加し、変更されたjson_docドキュメントを返します。 経路 − 値対は、左から右へ順に評価される。 1つのパスと値のペアを評価することによって生成されるJSONドキュメントは、次のパスと値のペアが評価される新しい値になります。
  • サンプルコード:
    @ json_doc = '{"a": 1, "b": [2,3], "c": 4}';
    SELECT JSON_ARRAY_APPEND(@ json_doc, '$.b', 'x');
    + ------------------------------------------ +
    | JSON_ARRAY_APPEND(@ json_doc、'$.b' 、'x') |
    + ------------------------------------------ +
    | {"a":1,"b":[2,3,"x"],"c":4} |
    + ------------------------------------------ +
    SELECT JSON_ARRAY_APPEND(@ json_doc, '$.c', 'y');
    + ------------------------------------------ +
    | JSON_ARRAY_APPEND(@ json_doc、'$.c' 、'y') |
    + ------------------------------------------ +
    | {"a":1,"b":[2,3],"c":[4,"y"]} |
    + ------------------------------------------ + 

JSON_ARRAY_INSERT(json_doc, path, val [, path, val] ...)

  • 説明: この関数は、json_docドキュメントの特定の位置にあるJSON配列に値を挿入し、修正されたjson_docドキュメントを返します。 path引数に指定した配列位置の値が配列サイズを超えると、その値が配列の最後の要素として追加されます。 経路 − 値対は、左から右へ順に評価される。 1つのパスと値のペアを評価することによって生成されるJSONドキュメントは、次のパスと値のペアが評価される新しい値になります。
  • サンプルコード:
    SET @ json_doc = '["a", {"b": [1, 2]}, [3, 4]]';
    SELECT JSON_ARRAY_INSERT(@ json_doc, '$[1]', 'x');
    + ------------------------------------------- +
    | JSON_ARRAY_INSERT(@ json_doc, '$[1]', 'x') |
    + ------------------------------------------- +
    | ["a","x",{"b":[1,2]},[3,4]] |
    + ------------------------------------------- +
    SELECT JSON_ARRAY_INSERT(@ json_doc, '$[10]', 'x');
    + -------------------------------------------- +
    | JSON_ARRAY_INSERT(@ json_doc, '$[10]', 'x') |
    + -------------------------------------------- +
    | ["a",{"b":[1,2]},[3,4],"x"] |
    + -------------------------------------------- +
    SELECT JSON_ARRAY_INSERT(@ json_doc, '$[1].b[1]', 'x');
    + ------------------------------------------------ +
    | JSON_ARRAY_INSERT(@ json_doc, '$[1].b[1]', 'x') |
    + ------------------------------------------------ +
    | ["a",{"b":[1,"x",2]]},[3,4]] |
    + ------------------------------------------------ +
    SELECT JSON_ARRAY_INSERT(@ json_doc, '$[0]', 'x', '$[3][1]', 'y');
    + ----------------------------------------------------------- +
    | JSON_ARRAY_INSERT(@ json_doc, '$[0]', 'x', '$[3][1]', 'y') |
    + ----------------------------------------------------------- +
    | ["x","a",{"b":[1,2]},[3,"y",4]] |
    + ----------------------------------------------------------- + 

JSON_INSERT(json_doc, path, val [, path, val] ...)

  • 説明: この関数は、json_doc引数の特定のパスに値を挿入します。 経路 − 値対は、左から右へ順に評価される。 1つのパスと値のペアを評価することによって生成されるJSONドキュメントは、次のパスと値のペアが評価される新しい値になります。 この関数は、次の条件に基づいて特定のパスに値を挿入します。
    • パスと値のペアで指定したパスに既存の値がある場合、関数はパスと値のペアを無視し、既存の値を上書きしません。
    • パスと値のペアで指定したパスに値がない場合、関数は次の条件に基づいてデータを挿入します。
      • JSONオブジェクトは、キーと値のペアのコレクションです。 各キーと値のペアは、JSONオブジェクトのメンバーを表します。 この場合、指定したメンバーがJSONオブジェクトに存在しない場合、関数はそのメンバーをオブジェクトに追加します。
      • path引数でjson_doc引数の配列境界の上にある配列の下付き文字を指定した場合、指定した配列の末尾にval引数が追加されます。 スカラー値は、1つの要素を含む配列としてラップされます。
      • 他の条件では、パスと値のペアは無視され、操作は実行されません。

    JSON_REPLACE() 、JSON_SET() 、およびJSON_INSERT() 関数の違いについては、「JSON_REPLACE」および「JSON_SET」をご参照ください。

  • サンプルコード:
    SET @ json_doc = '{ "a": 1, "b": [2,3]}';
    SELECT JSON_INSERT(@ json_doc, '$.a', 10, '$.c', '[true, false]');
    + ----------------------------------------------------------- +
    | JSON_INSERT(@ json_doc, '$.a', 10, '$.c', '[true, false]') |
    + ----------------------------------------------------------- +
    | {"a":1,"b":[2,3],"c":"[true, false]"} |
    + ----------------------------------------------------------- + 

JSON_MERGE(json_doc, json_doc [, json_doc] ...)

この関数は、JSON_MERGE_PRESERVE () 関数と同じように機能します。 JSON_MERGE () 関数はMySQL 5.7では廃止され、MySQL 8.0.3では削除されます。

JSON_MERGE_PATCH(json_doc, json_doc [, json_doc] ...)

  • この関数は、複数のJSONドキュメントをマージし、重複するキーを持つメンバーを削除します。 この関数は、2つのJSONドキュメントを左から右に順番にマージします。 たとえば、JSON_MERGE_PATCH() 関数を使用してdoc 1とdoc 2という名前の2つのJSONドキュメントをマージする場合、次のルールが使用されます。
    1. doc 1がオブジェクトでない場合、マージの結果はdoc 2です。
    2. doc 2がオブジェクトでない場合、マージの結果はdoc 2です。
    3. doc 1とdoc 2がオブジェクトの場合、マージの結果は次のメンバーを持つオブジェクトになります。
      • doc 2に対応するキーを持たないdoc 1のメンバー。
      • doc 1に対応するキーがなく、キー値がJSON nullリテラルではないdoc 2のメンバー。
      • doc 1とdoc 2で同じキーを持ち、doc 2でキー値を持つメンバーは、JSON nullリテラルではありません。 これらのメンバーの値は、前述のルールに基づいて、doc 1の値とdoc 2の値を再帰的にマージした結果です。

      doc1に対応するキーを持つdoc2のメンバーは、前述のルールに基づいて保持されます。

  • サンプルコード:
    JSON_MERGE_PATCH('{"name": "polardb-x"}', '{"id": 123}');
    + ---------------------------------------------------------- +
    | JSON_MERGE_PATCH('{"name": "polardb-x"}', '{"id": 123}') |
    + ---------------------------------------------------------- +
    | {"name":"polardb-x","id":123} |
    + ---------------------------------------------------------- +
    SELECT JSON_MERGE_PATCH('{"a":1, "b":2}', '{"b":null}');
    + -------------------------------------------------- +
    | JSON_MERGE_PATCH('{"a":1, "b":2}', '{"b":null}') |
    + -------------------------------------------------- +
    | {"a":1} |
    + -------------------------------------------------- +
    SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }', '{ "a": 3, "c":4 }',
        -> '{ "a": 5, "d":6 }');
    + --------------------------------------------------------------------------------- +
    | JSON_MERGE_PATCH('{ "a": 1, "b":2 }', '{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }') |
    + --------------------------------------------------------------------------------- +
    | {"a":5,"b":2,"c":4,"d":6} |
    + --------------------------------------------------------------------------------- + 

JSON_MERGE_PRESERVE(json_doc, json_doc [, json_doc] ...)

  • 説明:

    この関数は、複数のJSONドキュメントをマージし、ドキュメント内のすべてのメンバーを保持します。 この関数は、重複するキーを持つメンバーを削除しません。 この関数は、次のルールに基づいてJSONドキュメントをマージします。

    • 隣接するアレイは、単一のアレイにマージされる。
    • 隣接するオブジェクトは単一のオブジェクトにマージされます。
    • スカラー値は配列としてラップされ、配列としてマージされます。
    • オブジェクトと配列をマージする場合、オブジェクトは単一の要素を含む配列としてラップされ、他の配列とマージされます。
  • JSON_MERGE_PRESERVE() 関数とJSON_MERGE_PATCH() 関数の違いについては、「JSON_MERGE_PATCH」をご参照ください。 サンプルコード:
    JSON_MERGE_PRESERVE('{"name": "polardb-x"}', '{"id": 123}');
    + ------------------------------------------------------------- +
    | JSON_MERGE_PRESERVE('{"name": "polardb-x"}', '{"id": 123}') |
    + ------------------------------------------------------------- +
    | {"name":"polardb-x","id":123} |
    + ------------------------------------------------------------- +
    SELECT JSON_MERGE_PRESERVE('{"a":1, "b":2}', '{"b":null}');
    + ----------------------------------------------------- +
    | JSON_MERGE_PRESERVE('{"a":1, "b":2}', '{"b":null}') |
    + ----------------------------------------------------- +
    | {"a":1,"b":[2,null]} |
    + ----------------------------------------------------- +
    SELECT JSON_MERGE_PRESERVE('{ "a": 1, "b":2 }', '{ "a": 3, "c":4 }',
        -> '{ "a": 5, "d":6 }');
    + ------------------------------------------------------------------------------------ +
    | JSON_MERGE_PRESERVE('{ "a": 1, "b":2 }', '{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }') |
    + ------------------------------------------------------------------------------------ +
    | {"a":[1,3,5],"b":2,"c":4,"d":6} |
    + ------------------------------------------------------------------------------------ + 

JSON_REMOVE(json_doc, path [, path] ...)

  • 説明: この関数は、JSONドキュメントの特定のパスから要素を削除します。 パス引数は左から右へ順番に評価されます。 1つのパスと値のペアを評価することによって生成されるJSONドキュメントは、次のパスと値のペアが評価される新しい値になります。 指定された要素が指定されたパスに存在しない場合、エラーは返されません。
  • サンプルコード:
    @ json_doc = '["a", ["b", "c"], "d"]';
    SELECT JSON_REMOVE(@ json_doc, '$[1]');
    + -------------------------------- +
    | JSON_REMOVE(@ json_doc, '$[1]') |
    + -------------------------------- +
    | ["a","d"] |
    + -------------------------------- + 

JSON_REPLACE(json_doc, path, val [, path, val] ...)

  • 説明: この関数は、JSONドキュメントの指定されたパスに存在する値を置き換えます。 経路 − 値対は、左から右へ順に評価される。 1つのパスと値のペアを評価することによって生成されるJSONドキュメントは、次のパスと値のペアが評価される新しい値になります。 指定された要素が指定されたパスに存在しない場合、エラーは返されません。
  • サンプルコード:
    SET @ json_doc = '{ "a": 1, "b": [2,3]}';
    SELECT JSON_REPLACE(@ json_doc, '$.a', 10, '$.c', '[true, false]');
    + ------------------------------------------------------------ +
    | JSON_REPLACE(@ json_doc, '$.a', 10, '$.c', '[true, false]') |
    + ------------------------------------------------------------ +
    | {"a":"10","b":[2,3]} |
    + ------------------------------------------------------------ + 

JSON_SET(json_doc, path, val [, path, val] ...)

  • 説明: この関数は、JSONドキュメントの指定されたパスに値を挿入するか、指定されたパスの値を更新します。 経路 − 値対は、左から右へ順に評価される。 1つのパスと値のペアを評価することによって生成されるJSONドキュメントは、次のパスと値のペアが評価される新しい値になります。 この関数は、次のルールに基づいて値を挿入または更新します。
    • パスと値のペアで指定したパスに既存の値がある場合、関数は既存の値を新しい値で上書きします。
    • パスと値のペアで指定したパスに値がない場合、関数は次の条件に基づいてデータを挿入します。
      • JSONオブジェクトは、キーと値のペアのコレクションです。 各キーと値のペアは、JSONオブジェクトのメンバーを表します。 この場合、指定したメンバーがJSONオブジェクトに存在しない場合、関数はそのメンバーをオブジェクトに追加します。
      • path引数でjson_doc引数の配列境界の上にある配列の下付き文字を指定した場合、指定した配列の末尾にval引数が追加されます。 スカラー値は、1つの要素を含む配列としてラップされます。
      • 他の条件では、パスと値のペアは無視され、操作は実行されません。
  • サンプルコード:
    SET @ json_doc = '{ "a": 1, "b": [2,3]}';
    SELECT JSON_SET(@ json_doc, '$.a', 10, '$.c', '[true, false]');
    + ------------------------------------------------- +
    | JSON_SET(@ j, '$.a', 10, '$.c', '[true, false]') |
    + ------------------------------------------------- +
    | {"a":10,"b":[2,3],"c":[true,false]} |
    + ------------------------------------------------- + 

JSON_UNQUOTE(json_val)

  • 説明: この関数は、json_val引数の引用を解除し、エスケープされた文字をエスケープされていないかのように解釈し、結果としてutf8mb4文字列を返します。
  • サンプルコード:
    JSON_UNQUOTE('"abc"');
    + ----------------------- +
    | JSON_UNQUOTE('"abc"') |
    + ----------------------- +
    | abc |
    + ----------------------- +
    SELECT JSON_UNQUOTE('"a\\tbc"');
    + -------------------------- +
    | JSON_UNQUOTE('"a\\tbc"') |
    + -------------------------- +
    | a bc |
    + -------------------------- +
    SELECT JSON_UNQUOTE('"\\t\\u0032"');
    + ------------------------------ +
    | JSON_UNQUOTE('"\\t\\u0032"') |
    + ------------------------------ +
    | 2 |
    + ------------------------------ + 

JSON_DEPTH(json_doc)

  • 説明:

    この関数は、json_doc引数の最大深度を返します。 この関数は、次のルールに基づいて結果を返します。

    • 空の配列、空のオブジェクト、またはスカラー値の深さは1です。
    • 1つの要素のみを含む配列の深さは1です。
    • JSONオブジェクトの各メンバーの深さが1の場合、JSONオブジェクトの深さは2です。
  • サンプルコード:
    JSON_DEPTH('[10, {"a": 20}]');
    + ------------------------------- +
    | JSON_DEPTH('[10, {"a": 20}]') |
    + ------------------------------- +
    | 3 |
    + ------------------------------- + 

JSON_LENGTH(json_doc [, path])

  • 説明:

    この関数は、json_doc引数の長さを返します。 この関数は、次のルールに基づいて結果を返します。

    • スカラー値の長さは1です。
    • 配列の長さは、配列要素の数です。
    • オブジェクトの長さは、オブジェクトメンバーの数です。
    • json_doc引数の長さには、ネストされた配列またはオブジェクトの長さは含まれません。
  • サンプルコード:
    JSON_LENGTH('{"a": 1, "b": {"c": 30}}');
    + ----------------------------------------- +
    | JSON_LENGTH('{"a": 1, "b": {"c": 30}}') |
    + ----------------------------------------- +
    | 2 |
    + ----------------------------------------- + 

JSON_TYPE(json_val)

  • 説明: この関数は、json_val引数の型を返します。
  • サンプルコード:
    SET @ json_obj = '{"a": [10, true]}';
    SELECT JSON_TYPE(JSON_EXTRACT(@ json_obj, '$.a'));
    + ------------------------------------------- +
    | JSON_TYPE(JSON_EXTRACT(@ json_obj, '$.a')) |
    + ------------------------------------------- +
    | アレイ |
    + ------------------------------------------- +
    SELECT JSON_TYPE(JSON_EXTRACT(@ json_obj, '$.a[0]'));
    + ---------------------------------------------- +
    | JSON_TYPE(JSON_EXTRACT(@ json_obj, '$.a[0]')) |
    + ---------------------------------------------- +
    | INTEGER |
    + ---------------------------------------------- +
    SELECT JSON_TYPE(JSON_EXTRACT(@ json_obj, '$.a[1]'));
    + ---------------------------------------------- +
    | JSON_TYPE(JSON_EXTRACT(@ json_obj, '$.a[1]')) |
    + ---------------------------------------------- +
    | BOOLEAN |
    + ---------------------------------------------- + 

JSON_VALID(val)

  • 説明: この関数は、val引数が有効なJSON値であるかどうかを示す0または1を返します。
  • サンプルコード:
    JSON_VALID('hello') 、JSON_VALID('"hello"');
    + --------------------- + ----------------------- +
    | JSON_VALID('hello') | JSON_VALID('"hello"') |
    + --------------------- + ----------------------- +
    | 0 | 1 |
    + --------------------- + ----------------------- + 

JSON_PRETTY(json_doc)

  • 説明: この関数は、json_doc引数を、行をインデントして改行を挿入することで読みやすい形式で出力します。
  • サンプルコード:
    SET @ json_doc = '["abc", [{"k1": 123}, "def"], {"k2": "abc"}, {"k3": null}]';
    SELECT JSON_PRETTY(@ json_doc);
    + --------------------------------------------------------------------------- +
    | JSON_PRETTY(@ json_doc) |
    + --------------------------------------------------------------------------- +
    | [
        "abc" 、
        [
            {
                "k1":123
            },
            "def"
        ],
        {
            "k2":"abc"
        },
        {
        }
    ] |
    +---------------------------------------------------------------------------+

JSON_STORAGE_SIZE(json_doc)

  • 説明: この関数は、json_doc引数のバイナリ表現を格納するために使用されるバイト数を返します。
  • サンプルコード:
    SET @ json_doc = '[999, "polardb-x", [1,2, 3], 888.88]';
    SELECT JSON_STORAGE_SIZE(@ json_doc) AS Size;
    + ------
    | サイズ |
    + ------
    | 48 |
    + ------ +