JSON関数

JSON関数を使用してJSONデータ型のデータを操作できます。

JSON値を作成する関数

関数名説明
JSON_ARRAY()値のリスト(空の場合もある)を評価し、それらの値を含むJSON配列を返します。
JSON_OBJECT()キーと値のペアの(空の場合もある)リストを評価し、それらのペアを含むJSONオブジェクトを返します。
JSON_QUOTE()引用符付きのJSON値として文字列を返します

JSON値を検索する関数

関数名説明
JSON_CONTAINS()指定された候補JSONドキュメントがターゲットJSONドキュメント内に含まれているかどうかを1または0を返すことで示します。
JSON_CONTAINS_PATH()JSONドキュメントに指定されたパスまたはパスにデータが含まれているかどうかを示す0または1を返します。
JSON_EXTRACT()pathの引数に一致するドキュメントの部分から選択されたJSONドキュメントからデータを返します。
->評価パスの後のJSON列から値を返します。1の別名ですJSON_EXTRACT(doc, path_literal)
->>評価パスの後のJSON列からの値と、その結果の引用符を外した値を返しますJSON_UNQUOTE(JSON_EXTRACT(doc, path_literal))の別名です。
JSON_KEYS()JSONオブジェクトの最上位レベルの値からキーをJSON配列として返します。パス引数が指定されている場合は、選択したパスから最上位レベルのキーを返します。
JSON_検索()JSONドキュメントで文字列の1つまたはすべてに一致するものを検索する
メンバー()渡された値が JSON 配列の要素である場合は 1 を返します。それ以外の場合は 0 を返します。
JSON_OVERLAPS()2 つの JSON ドキュメントに重複部分があるかどうかを示します。重複している場合は 1 を返します。重複していない場合は 0 を返します。

JSON値を変更する関数

関数名説明
JSON_APPEND()JSON_ARRAY_APPEND()の別名
JSON_ARRAY_APPEND()JSONドキュメント内の指定された配列の末尾に値を追加し、結果を返します。
JSON_ARRAY_INSERT()JSONドキュメントの指定された場所に値を挿入し、結果を返します。
JSON_INSERT()JSONドキュメントにデータを挿入し、結果を返します
JSON_MERGE_PATCH()重複するキーの値を保持せずに、2つ以上のJSONドキュメントをマージします。
JSON_MERGE_PRESERVE()すべての値を保持しながら2つ以上のJSONドキュメントをマージします
JSON_MERGE()JSON_MERGE_PRESERVE()の非推奨のエイリアス
JSON_REMOVE()JSONドキュメントからデータを削除し、結果を返します
JSON_REPLACE()JSONドキュメント内の既存の値を置き換え、結果を返します
JSON_SET()JSONドキュメントにデータを挿入または更新し、結果を返します。
JSON_UNQUOTE()JSON値を引用符で囲まず、結果を文字列として返します。

JSON値属性を返す関数

関数名説明
JSON_DEPTH()JSONドキュメントの最大深度を返します
JSON_LENGTH()JSONドキュメントの長さを返します。パス引数が指定されている場合は、パス内の値の長さを返します。
JSON_TYPE()JSON値の型を示す文字列を返します
JSON_VALID()json_doc が有効な JSON であるかどうかを確認します。

ユーティリティ関数

関数名説明
JSON_PRETTY()JSONドキュメントのきれいなフォーマット
JSON_STORAGE_FREE()JSON 値のバイナリ表現が更新された後に解放されたstorage容量を返します。
JSON_STORAGE_SIZE()json 値を格納するために必要なバイトのおおよそのサイズを返します。サイズは圧縮を使用する TiKV を考慮していないため、この関数の出力は MySQL と厳密には互換性がありません。

集計関数

関数名説明
JSON_ARRAYAGG()キーの集約を提供します。
JSON_OBJECTAG() は、指定されたキーの値の集計を提供します。

JSONパス

多くの JSON関数は、JSON ドキュメントの一部を選択するためにJSONパス使用します。

シンボル説明
$ドキュメントルート
.メンバーの選択
[]配列の選択
*ワイルドカード
**パスワイルドカード
[<n> to <n>]配列範囲の選択

以降のコンテンツでは、次の JSON ドキュメントを例として、JSONPath の使用方法を説明します。

{ "database": { "name": "TiDB", "features": [ "distributed", "scalable", "relational", "cloud native" ], "license": "Apache-2.0 license", "versions": [ { "version": "v8.1.1", "type": "lts", "release_date": "2024-08-27" }, { "version": "v8.0.0", "type": "dmr", "release_date": "2024-03-29" } ] }, "migration_tool": { "name": "TiDB Data Migration", "features": [ "MySQL compatible", "Shard merging" ], "license": "Apache-2.0 license" } }
JSONパス説明JSON_EXTRACT()
$文書のルート完全な文書を返します
$.databasedatabaseオブジェクト"database"から始まる完全な構造を返します。 "migration_tool"とそれ以下の構造は含まれません。
$.database.nameデータベースの名前。"TiDB"
$.database.featuresすべてのデータベース機能["distributed", "scalable", "relational", "cloud native"]
$.database.features[0]最初のデータベース機能。"distributed"
$.database.features[2]3番目のデータベース機能。"relational"
$.database.versions[0].type最初のデータベース バージョンのタイプ。"lts"
$.database.versions[*].release_dateすべてのバージョンのリリース日。["2024-08-27","2024-03-29"]
$.*.features2つの機能配列[["distributed", "scalable", "relational", "cloud native"], ["MySQL compatible", "Shard merging"]]
$**.versionパスワイルドカードを含むすべてのバージョン["v8.1.1","v8.0.0"]
$.database.features[0 to 2]1 番目から 3 番目までのデータベース機能の範囲。["scalable","relational"]

詳細についてはJSONPathのIETFドラフト参照してください。

参照

サポートされていない関数

  • JSON_SCHEMA_VALID()
  • JSON_SCHEMA_VALIDATION_REPORT()
  • JSON_TABLE()
  • JSON_VALUE()

詳細については#14486参照してください。

MySQL 互換性

  • TiDB は、MySQL 8.0 で利用可能なJSON関数のほとんどをサポートしています。

このページは役に立ちましたか?