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

JSON_SET

説明​

JSON_SET 関数は JSON 内にデータを挿入または置換し、変更後の JSON を返します。

構文​

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

パラメータ​

  • <json_object>: 変更対象となる JSON 型の式です。
  • <path>: 値を挿入するパスを指定する文字列型の式です。
  • <value>: 挿入する値です。JSON 型、または TO_JSON がサポートする型を指定します。

戻り値​

  • Nullable(JSON): 変更後の JSON オブジェクトを返します。

使用上の注意​

  1. <path> が指す値が存在する場合は JSON_REPLACE、存在しない場合は JSON_INSERT と同じように動作します。

例​

  1. パスが存在しない場合
    select json_set('{}', '$.k', json_parse('{}'), '$.k.k2', 123);
    +--------------------------------------------------------+
    | json_set('{}', '$.k', json_parse('{}'), '$.k.k2', 123) |
    +--------------------------------------------------------+
    | {"k":{"k2":123}} |
    +--------------------------------------------------------+
  2. <path> が指す値が JSON オブジェクトにすでに存在する場合
    select json_set('{"k": 1}', "$.k", 2);
    +--------------------------------+
    | json_set('{"k": 1}', "$.k", 2) |
    +--------------------------------+
    | {"k":2} |
    +--------------------------------+
  3. NULL パラメータ
    select json_set(NULL, '$[1]', 123);
    +-----------------------------+
    | json_set(NULL, '$[1]', 123) |
    +-----------------------------+
    | NULL |
    +-----------------------------+
    select json_set('{"k": "v"}', NULL, 123);
    +-----------------------------------+
    | json_set('{"k": "v"}', NULL, 123) |
    +-----------------------------------+
    | NULL |
    +-----------------------------------+
    select json_set('{"k": "v"}', '$.k[1]', NULL);
    +----------------------------------------+
    | json_set('{"k": "v"}', '$.k[1]', NULL) |
    +----------------------------------------+
    | {"k":["v",null]} |
    +----------------------------------------+