- 카테고리:
반정형 및 정형 데이터 함수 (구문 분석)
TRY_PARSE_JSON¶
구문 분석 중 오류가 발생하면 NULL 값을 반환하는 PARSE_JSON 의 특수 버전입니다.
구문¶
TRY_PARSE_JSON( <expr> )
인자¶
expr
문자열 형식의 식입니다(예: VARCHAR).
반환¶
반환된 값은 VARIANT
형식이며 JSON 문서를 포함합니다.
사용법 노트¶
이 함수는 압축된 최대 크기가 8MB인 입력 식을 지원합니다.
입력이 NULL이면 출력도 NULL입니다. 그러나 입력 문자열이
'null'
인 경우, 결과가 SQL NULL이 아니라null
을 포함하는 유효한 VARIANT 값이 되도록 JSON null 값으로 해석됩니다.10진수를 구문 분석할 때 이 함수는 123.45를 DOUBLE이 아닌 NUMBER(5,2)로 처리하여 표현의 정확성을 유지하려고 시도합니다. 그러나 과학적 표기법을 사용하는 숫자(예: 1.2345e+02)나, 범위 또는 스케일 제한으로 인해 고정 소수점 10진수로 저장할 수 없는 숫자는 DOUBLE로 저장됩니다. JSON은 기본적으로 TIMESTAMP, DATE, TIME 또는 BINARY와 같은 값을 나타내지 않으므로 문자열로 표현해야 합니다.
JSON에서 오브젝트(“사전” 또는 “해시”라고도 함)는 순서가 지정되지 않은 키-값 페어의 세트입니다.
TO_JSON
및TRY_PARSE_JSON
은 (거의) 역 또는 상호 함수입니다.TRY_PARSE_JSON
함수는 문자열을 입력으로서 사용하고 JSON 호환 베리언트를 반환합니다.TO_JSON
함수는 JSON 호환 베리언트를 취하고 문자열을 반환합니다. X가 유효한 JSON을 포함하는 문자열인 경우, 다음은 (개념적으로) true입니다.X = TO_JSON(TRY_PARSE_JSON(X));
예를 들어, 다음은 (개념적으로) true입니다.
'{"pi":3.14,"e":2.71}' = TO_JSON(TRY_PARSE_JSON('{"pi":3.14,"e":2.71}'))
그러나 다음 두 가지 이유로 이 함수는 완벽하게 상호적이지는 않습니다.
TO_JSON
에 의해 생성된 문자열의 키-값 페어의 순서는 예측할 수 없습니다.TO_JSON
에 의해 생성된 문자열은TRY_PARSE_JSON
에 전달된 문자열보다 공백이 적을 수 있습니다.
다음은 동등한 JSON이지만, 동등한 문자열은 아닙니다.
{"pi": 3.14, "e": 2.71}
{"e":2.71,"pi":3.14}
예¶
다음은 JSON으로 구문 분석할 수 있는 값이 포함된 문자열을 구문 분석하기 위해 TRY_PARSE_JSON
을 호출하여 VARIANT 열에 다양한 형식의 데이터를 저장하는 예를 보여줍니다.
테이블을 만들고 채웁니다.
create or replace temporary table vartab (ID INTEGER, v VARCHAR); insert into vartab (id, v) VALUES (1, '[-1, 12, 289, 2188, false,]'), (2, '{ "x" : "abc", "y" : false, "z": 10} '), (3, '{ "bad" : "json", "missing" : true, "close_brace": 10 ');
TRY_PARSE_JSON
을 사용하여 데이터를 쿼리합니다. 세 번째 줄의 값은 NULL입니다. 쿼리가TRY_PARSE_JSON
대신PARSE_JSON
을 사용했다면 쿼리가 실패했을 것입니다.SELECT ID, try_parse_json(v) FROM vartab ORDER BY ID; +----+-------------------+ | ID | TRY_PARSE_JSON(V) | |----+-------------------| | 1 | [ | | | -1, | | | 12, | | | 289, | | | 2188, | | | false, | | | undefined | | | ] | | 2 | { | | | "x": "abc", | | | "y": false, | | | "z": 10 | | | } | | 3 | NULL | +----+-------------------+