본문으로 건너뛰기
최종 수정: 에

JSON_REPLACE

설명​

JSON_REPLACE 함수는 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} |
    +-----------------------------------------+