メインコンテンツまでスキップ
に最終更新

JSON_INSERT

説明​

JSON_INSERT は JSON に値を挿入し、変更後の結果を返します。

構文​

JSON_INSERT (<json_object>, <path>,  <value>[, <path>,  <value>, ...])

パラメータ​

パラメータ説明
<json_object>変更対象の JSON 型の式。
<path>値を挿入する位置を指定する文字列型の JSON パス。
<value>挿入する値。JSON 型、または TO_JSON がサポートする型。

戻り値​

  • Nullable(JSON) 型の変更後の JSON オブジェクトを返します。入力の JSON またはパスが NULL の場合は NULL を返します。

使用上の注意​

  1. パスと値の組は左から右へ順に評価されます。
  2. <path> が指す値が既に存在する場合、その組は結果に影響しません。
  3. <path> にワイルドカードを含めるとエラーになります。
  4. <path> が複数階層の場合、最後の階層を除くすべてのパスが JSON オブジェクト内に存在する必要があります。
  5. <path> が配列要素を指していて対象が配列でない場合、対象を配列の最初の要素に変換してから通常の配列として処理します。
  6. <json_object> または <path> が NULL の場合は NULL を返します。<value> が NULL の場合は JSON の null 値を挿入します。

例​

  1. パスと値の組を左から右へ評価する
    select json_insert('{}', '$.k', json_parse('{}'), '$.k.k2', 123);
    +-----------------------------------------------------------+
    | json_insert('{}', '$.k', json_parse('{}'), '$.k.k2', 123) |
    +-----------------------------------------------------------+
    | {"k":{"k2":123}} |
    +-----------------------------------------------------------+
  2. <path> が指す値が既に存在する場合
    select json_insert('{"k": 1}', "$.k", 2);
    +-----------------------------------+
    | json_insert('{"k": 1}', "$.k", 2) |
    +-----------------------------------+
    | {"k":1} |
    +-----------------------------------+
  3. <path> にワイルドカードを含めた場合
    select json_insert('{"k": 1}', "$.*", 2);
    ERROR 1105 (HY000): errCode = 2, detailMessage = [INVALID_ARGUMENT] In this situation, path expressions may not contain the * and ** tokens or an array range, argument index: 1, row index: 0
  4. 中間階層を作成できない場合
    select json_insert('{}', '$.k1.k2.k3', 123);
    +--------------------------------------+
    | json_insert('{}', '$.k1.k2.k3', 123) |
    +--------------------------------------+
    | {} |
    +--------------------------------------+
  5. 配列への自動変換
    select json_insert('{"k": "v"}', '$[1]', 123);
    +----------------------------------------+
    | json_insert('{"k": "v"}', '$[1]', 123) |
    +----------------------------------------+
    | [{"k": "v"}, 123] |
    +----------------------------------------+
    select json_insert('{"k": "v"}', '$.k[1]', 123);
    +------------------------------------------+
    | json_insert('{"k": "v"}', '$.k[1]', 123) |
    +------------------------------------------+
    | {"k": ["v", 123]} |
    +------------------------------------------+
  6. NULL パラメータ
    select json_insert(NULL, '$[1]', 123);
    +--------------------------------+
    | json_insert(NULL, '$[1]', 123) |
    +--------------------------------+
    | NULL |
    +--------------------------------+
    select json_insert('{"k": "v"}', NULL, 123);
    +--------------------------------------+
    | json_insert('{"k": "v"}', NULL, 123) |
    +--------------------------------------+
    | NULL |
    +--------------------------------------+
    select json_insert('{"k": "v"}', '$.k[1]', NULL);
    +-------------------------------------------+
    | json_insert('{"k": "v"}', '$.k[1]', NULL) |
    +-------------------------------------------+
    | {"k": ["v", null]} |
    +-------------------------------------------+