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

JSON_INSERT

설명​

JSON_INSERT 함수는 JSON에 데이터를 삽입하고 결과를 반환하는 데 사용됩니다.

구문​

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

매개변수​

  • <json_object>: JSON 타입 표현식으로, 수정할 대상입니다.
  • <path>: 문자열 타입 표현식으로, 값을 삽입할 경로를 지정합니다.
  • <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]} |
    +-------------------------------------------+