PARSE_JSON
PARSE_JSON
입력 문자열을 JSON 문서로 해석해 VARIANT 값을 만들어내는 함수예요. JSON 형식의 데이터를 ARRAY나 OBJECT로 변환해 VARIANT 값에 바로 저장하고 싶을 때 씁니다.
본문
PARSE_JSON( <expr> [ , '<parameter>' ] )
expr — 유효한 JSON 정보를 담은 문자열 타입(VARCHAR 등) 표현식이에요.
'parameter' — 일치 항목을 찾을 때 사용할 파라미터를 지정하는 문자열 상수예요.
| Parameter | Description |
|---|---|
| d | JSON 객체의 중복 키를 허용. 중복 키가 있으면 해당 키에 마지막으로 지정된 값을 가진 단일 인스턴스로 반환 |
| s | JSON 객체의 중복 키를 허용하지 않음(strict). 기본값 |
JSON 문서를 담은 VARIANT 타입 값을 반환해요. 입력이 NULL이면 NULL을 반환해요. 이 함수는 구조화 타입(structured type)은 반환하지 않아요.
사용 메모
- 최대 64MB(압축) 크기의 입력 표현식을 지원해요.
- 빈 문자열이나 공백만 있는 문자열로 호출하면(빈 문자열은 유효한 JSON이 아님에도) 오류 대신 NULL을 반환해요. 일부 입력이 빈 문자열이어도 처리가 중단되지 않게 하려는 동작이에요.
- 입력이 NULL이면 출력도 NULL이에요. 하지만 입력 문자열이
'null'이면 JSON null 값으로 해석되어 SQL NULL이 아니라null을 담은 유효한 VARIANT가 돼요. - 소수 숫자를 파싱할 때
123.45를 DOUBLE이 아닌 NUMBER(5,2)로 취급해 표현의 정확성을 보존하려 해요. 다만 지수 표기(예:1.2345e+02)나 범위·스케일 한계로 고정 소수점으로 저장할 수 없는 숫자는 DOUBLE로 저장돼요. JSON은 TIMESTAMP·DATE·TIME·BINARY를 기본적으로 표현하지 않으므로 이런 값은 문자열로 표현해야 해요. - TO_JSON과 PARSE_JSON은 (거의) 상반(reciprocal) 관계예요.
PARSE_JSON은 문자열을 받아 JSON 호환 VARIANT를,TO_JSON은 JSON 호환 VARIANT를 받아 문자열을 반환해요. 하지만 완전히 상반되지는 않아서, 빈 문자열은 상호 처리되지 않고, TO_JSON이 만든 문자열의 키-값 순서나 공백도 예측할 수 없어요.
예시 — 다른 데이터 타입의 값을 VARIANT 컬럼에 저장:
CREATE OR REPLACE TABLE vartab (n NUMBER(2), v VARIANT);
INSERT INTO vartab
SELECT column1 AS n, PARSE_JSON(column2) AS v
FROM VALUES (1, 'null'),
(2, null),
(3, 'true'),
(4, '-17'),
(5, '123.12'),
(6, '1.912e2'),
(7, '"Om ara pa ca na dhih" '),
(8, '[-1, 12, 289, 2188, false,]'),
(9, '{ "x" : "abc", "y" : false, "z": 10} ')
AS vals;
기본적으로 중복 키를 넣으면 오류가 나요. d 파라미터를 지정하면 중복 키를 허용하고 마지막 값을 써요.
INSERT INTO vartab
SELECT column1 AS n, PARSE_JSON(column2, 'd') AS v
FROM VALUES (10, '{ "a" : "123", "b" : "456", "a": "789"} ')
AS vals;