メインコンテンツまでスキップ
バージョン: 26.x

JSON_INSERT

説明

JSON_INSERT関数は、JSONにデータを挿入し、結果を返すために使用されます。

構文

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

パラメータ

  • <json_object>: JSON型の式、変更対象となるオブジェクト
  • <path>: String型の式、値を挿入するパスを指定
  • <value>: JSON型またはTO_JSONでサポートされるその他の型、挿入する値

戻り値

  • Nullable(JSON) 変更されたJSONオブジェクトを返す

使用上の注意

  1. パスと値のペアは左から右に評価されることに注意してください。
  2. <path>が指すJSONオブジェクト内の値が既に存在する場合、効果がありません。
  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>で指定された値がJSONオブジェクト内に既に存在します

    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]} |
    +-------------------------------------------+