TO_JSON
TO_JSON
VARIANT 값을 값의 JSON 표현을 포함한 문자열로 변환해요.
본문
구문
TO_JSON( expr )
인자
expr
유효한 JSON 정보를 담고 있는 VARIANT 타입의 표현식이에요.
반환 값
VARCHAR 타입의 값을 반환해요.
입력이 NULL이면 함수는 NULL을 반환해요.
사용 시 유의사항
- 입력이 NULL이면 출력도 NULL이에요. 입력이 JSON null을 포함한 VARIANT이면 반환 값은 문자열
null(즉 큰따옴표로 둘러싸인 단어 “null”)이에요. 아래 예시를 참고하세요. - JSON 객체(“dictionary” 또는 “hash”라고도 함)는 순서가 없는 키-값 쌍의 집합이에요. TO_JSON이 문자열을 만들 때 그 문자열에서 키-값 쌍의 순서는 예측할 수 없어요.
- TO_JSON과 PARSE_JSON은 (거의) 역(逆) 함수, 즉 상호 함수예요.
- PARSE_JSON 함수는 문자열을 입력으로 받아 JSON 호환 VARIANT를 반환해요.
- TO_JSON 함수는 JSON 호환 VARIANT를 받아 문자열을 반환해요.
- 다음은 X가 유효한 JSON을 포함한 문자열일 때 (개념적으로) 참이에요:
X = TO_JSON(PARSE_JSON(X));
예를 들어 다음은 (개념적으로) 참이에요:
{pi:3.14,e:2.71} = TO_JSON(PARSE_JSON({pi:3.14,e:2.71}))
- 그러나 함수들은 완벽히 역이 되지는 않아요. 왜냐하면:
- 빈 문자열과 공백만 있는 문자열은 역으로 처리되지 않아요. 예를 들어
PARSE_JSON()의 반환 값은 NULL이지만TO_JSON(NULL)의 반환 값은 NULL이며 역이 아니에요. - TO_JSON이 만든 문자열에서 키-값 쌍의 순서는 예측할 수 없어요.
- TO_JSON이 만든 문자열은 PARSE_JSON에 전달된 문자열보다 공백이 적을 수 있어요.
- 빈 문자열과 공백만 있는 문자열은 역으로 처리되지 않아요. 예를 들어
예를 들어 다음은 동등한 JSON이지만 동등한 문자열은 아니에요:
{pi: 3.14, e: 2.71}{e:2.71,pi:3.14}
예시
다음 예시들은 TO_JSON 함수를 사용해요.
VARIANT 값 삽입 및 쿼리로 문자열 변환
테이블을 만들고 채워요. INSERT 문은 PARSE_JSON 함수를 사용하여 테이블의 v 컬럼에 VARIANT 값을 삽입해요.
CREATE OR REPLACE TABLE jdemo1 (v VARIANT);
INSERT INTO jdemo1 SELECT PARSE_JSON({food:bard});
데이터를 쿼리하고 TO_JSON 함수를 사용하여 VARIANT 값을 문자열로 변환해요.
SELECT v, v:food, TO_JSON(v) FROM jdemo1;
+------------------+--------+-----------------+
| V | V:FOOD | TO_JSON(V) |
|------------------+--------+-----------------|
| { | bard | {food:bard} |
| food: bard | | |
| } | | |
+------------------+--------+-----------------+
PARSE_JSON 및 TO_JSON 함수로 NULL 값 처리
다음 예시는 PARSE_JSON과 TO_JSON이 NULL 값을 어떻게 처리하는지 보여줘요:
SELECT TO_JSON(NULL), TO_JSON(null::VARIANT),
PARSE_JSON(NULL), PARSE_JSON(null);
+---------------+--------------------------+------------------+--------------------+
| TO_JSON(NULL) | TO_JSON(NULL::VARIANT) | PARSE_JSON(NULL) | PARSE_JSON(NULL) |
|---------------+--------------------------+------------------+--------------------|
| NULL | null | NULL | null |
+---------------+--------------------------+------------------+--------------------+
PARSE_JSON과 TO_JSON 비교
다음 예시들은 PARSE_JSON 함수와 TO_JSON 함수의 관계를 보여줘요.
이 예시는 VARCHAR 컬럼과 VARIANT 컬럼을 가진 테이블을 만들어요. INSERT 문은 VARCHAR 값을 삽입하고, UPDATE 문은 그 VARCHAR 값에 대응하는 JSON 값을 생성해요.
CREATE OR REPLACE TABLE jdemo2 (
varchar1 VARCHAR,
variant1 VARIANT);
INSERT INTO jdemo2 (varchar1) VALUES ({PI:3.14});
UPDATE jdemo2 SET variant1 = PARSE_JSON(varchar1);
이 쿼리는 TO_JSON과 PARSE_JSON이 개념적으로 역함수임을 보여줘요:
SELECT varchar1,
PARSE_JSON(varchar1),
variant1,
TO_JSON(variant1),
PARSE_JSON(varchar1) = variant1,
TO_JSON(variant1) = varchar1
FROM jdemo2;
+-------------+----------------------+--------------+-------------------+---------------------------------+------------------------------+
| VARCHAR1 | PARSE_JSON(VARCHAR1) | VARIANT1 | TO_JSON(VARIANT1) | PARSE_JSON(VARCHAR1) = VARIANT1 | TO_JSON(VARIANT1) = VARCHAR1 |
|-------------+----------------------+--------------+-------------------+---------------------------------+------------------------------|
| {PI:3.14} | { | { | {PI:3.14} | True | True |
| | PI: 3.14 | PI: 3.14 | | | |
| | } | } | | | |
+-------------+----------------------+--------------+-------------------+---------------------------------+------------------------------+
그러나 함수들은 정확히 역이지는 않아요. 공백이나 키-값 쌍 순서의 차이가 출력이 입력과 일치하는 것을 막을 수 있어요. 예를 들어:
SELECT TO_JSON(PARSE_JSON({b:1,a:2})),
TO_JSON(PARSE_JSON({b:1,a:2})) = {b:1,a:2},
TO_JSON(PARSE_JSON({b:1,a:2})) = {a:2,b:1};
+--------------------------------------+--------------------------------------------------------+--------------------------------------------------------+
| TO_JSON(PARSE_JSON({B:1,A:2})) | TO_JSON(PARSE_JSON({B:1,A:2})) = {B:1,A:2} | TO_JSON(PARSE_JSON({B:1,A:2})) = {A:2,B:1} |
|--------------------------------------+--------------------------------------------------------+--------------------------------------------------------|
| {a:2,b:1} | False | True |
+--------------------------------------+--------------------------------------------------------+--------------------------------------------------------+
더 알아보기 (Learn more)
- PARSE_JSON — 문자열을 JSON VARIANT로 변환