メインコンテンツまでスキップ

json_each

json_each

説明

JSONオブジェクトの最も外側の要素を展開し、キーと値のペアで構成されるテーブルを返す。各要素ごとに1行のテーブルが返される。

構文

json_each(json_object_expr)

パラメータ

json_object_expr : JSONオブジェクトを表す式。オブジェクトはJSONカラムまたはPARSE_JSONなどのJSONコンストラクタ関数で生成されたJSONオブジェクトである。

戻り値

キーと値の2つの列を返す。キー列にはVARCHAR値が、値列にはJSON値が格納される。

使用上の注意

json_each関数はテーブル関数であり、テーブルを返す。返されるテーブルは複数の行から成る結果セットであるため、FROM句で元のテーブルと返されるテーブルを結合するためにLATERAL JOINを使用する必要がある。LATERAL JOINは必須であるが、LATERALキーワードはオプションである。json_each関数はSELECT句で使用できない。

-- 例として、tjという名前のテーブルを使用する。tjテーブルでは、j列はJSONオブジェクトである。
mysql> SELECT * FROM tj;
+------+------------------+
| id | j |
+------+------------------+
| 1 | {"a": 1, "b": 2} |
| 3 | {"a": 3} |
+------+------------------+

-- tjのj列をキーと値の2つの列に展開し、複数行から成る結果セットを取得する。この例では、LATERALキーワードを使用して結果セットをtjテーブルに結合している。

mysql> SELECT * FROM tj, LATERAL json_each(j);
+------+------------------+------+-------+
| id | j | key | value |
+------+------------------+------+-------+
| 1 | {"a": 1, "b": 2} | a | 1 |
| 1 | {"a": 1, "b": 2} | b | 2 |
| 3 | {"a": 3} | a | 3 |
+------+------------------+------+-------+