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

JSON_REPLACE

説明

JSON_REPLACE関数は、JSON内のデータを置換し、結果を返すために使用されます。

構文

JSON_REPLACE (<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. <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} |
    +-----------------------------------------+