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

JSON_REPLACE

説明​

JSON_REPLACE 関数は JSON 内の値を置き換え、変更後の JSON を返します。

構文​

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

パラメータ​

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

戻り値​

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

使用上の注意​

  1. パスと値の組は左から右へ順に評価されます。
  2. <path> が指す値が JSON オブジェクトに存在しない場合、その組は何も変更しません。
  3. <path> にワイルドカードは指定できません。指定するとエラーになります。
  4. <json_object> または <path> が NULL の場合は NULL を返します。<value> が NULL の場合は JSON の null 値を挿入します。

例​

  1. パスと値の組を左から右へ順に評価する
    select json_replace('{"k": {"k2": "v2"}}', '$.k', json_parse('{"k2": 321, "k3": 456}'), '$.k.k2', 123);
    +-------------------------------------------------------------------------------------------------+
    | json_replace('{"k": {"k2": "v2"}}', '$.k', json_parse('{"k2": 321, "k3": 456}'), '$.k.k2', 123) |
    +-------------------------------------------------------------------------------------------------+
    | {"k":{"k2":123,"k3":456}} |
    +-------------------------------------------------------------------------------------------------+
  2. <path> が指す値が JSON オブジェクトに存在しない場合
    select json_replace('{"k": 1}', "$.k2", 2);
    +-------------------------------------+
    | json_replace('{"k": 1}', "$.k2", 2) |
    +-------------------------------------+
    | {"k":1} |
    +-------------------------------------+
  3. <path> にワイルドカードは指定できない
    select json_replace('{"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. NULL パラメータ
    select json_replace(NULL, '$[1]', 123);
    +---------------------------------+
    | json_replace(NULL, '$[1]', 123) |
    +---------------------------------+
    | NULL |
    +---------------------------------+
    select json_replace('{"k": "v"}', NULL, 123);
    +---------------------------------------+
    | json_replace('{"k": "v"}', NULL, 123) |
    +---------------------------------------+
    | NULL |
    +---------------------------------------+
    select json_replace('{"k": "v"}', '$.k', NULL);
    +-----------------------------------------+
    | json_replace('{"k": "v"}', '$.k', NULL) |
    +-----------------------------------------+
    | {"k":null} |
    +-----------------------------------------+