JSON_EXTRACT_PATH_TEXT
JSON_EXTRACT_PATH_TEXT
첫 번째 인자를 JSON 문자열로 구문 분석하고, 두 번째 인자의 경로가 가리키는 요소의 값을 반환해요. 이는 TO_VARCHAR(GET_PATH(PARSE_JSON(JSON), PATH))와 동등해요.
본문
구문
JSON_EXTRACT_PATH_TEXT( <column_identifier> , '<path_name>' )
인자
- 추출하려는 데이터가 있는 컬럼의 이름이에요.
- 추출하려는 요소로 가는 경로를 포함하는 문자열이에요.
반환 값
반환 값의 데이터 타입은 VARCHAR예요.
사용상 주의사항
- 경로 이름이 어떤 요소에도 해당하지 않으면 함수는 NULL을 반환해요.
- 경로 이름 구문은 표준 JavaScript 표기법이에요. 마침표(예:
.)와 인덱스 연산자(예:[<index>])로 시작하는 필드 이름(식별자)의 연결로 구성돼요.- 첫 번째 필드 이름에는 앞의 마침표를 지정할 필요가 없어요.
- 인덱스 연산자의 인덱스 값은 (배열의 경우) 음이 아닌 정수이거나 (객체 필드의 경우) 작은따옴표 또는 큰따옴표로 묶인 문자열 리터럴일 수 있어요.
- 자세한 내용은 Querying Semi-structured Data를 참고해요.
- 구문적 일관성을 유지하기 위해 경로 표기법은 SQL 스타일의 큰따옴표로 묶인 식별자와 경로 구분 기호로
:사용을 지원해요.
예시
테이블을 만들고 값을 삽입해요.
CREATE TABLE demo1 (id INTEGER, json_data VARCHAR);
INSERT INTO demo1 SELECT
1, '{"level_1_key": "level_1_value"}';
INSERT INTO demo1 SELECT
2, '{"level_1_key": {"level_2_key": "level_2_value"}}';
INSERT INTO demo1 SELECT
3, '{"level_1_key": {"level_2_key": ["zero", "one", "two"]}}';
JSON_EXTRACT_PATH_TEXT를 사용해 간단한 1-레벨 문자열에서 값을 추출해요.
SELECT
TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key'))
AS OLD_WAY,
JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key')
AS JSON_EXTRACT_PATH_TEXT
FROM demo1
ORDER BY id;
+--------------------------------------+--------------------------------------+
| OLD_WAY | JSON_EXTRACT_PATH_TEXT |
|--------------------------------------+--------------------------------------|
| level_1_value | level_1_value |
| {"level_2_key":"level_2_value"} | {"level_2_key":"level_2_value"} |
| {"level_2_key":["zero","one","two"]} | {"level_2_key":["zero","one","two"]} |
+--------------------------------------+--------------------------------------+
2-레벨 경로를 사용해 2-레벨 문자열에서 값을 추출해요.
SELECT
TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key.level_2_key'))
AS OLD_WAY,
JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key.level_2_key')
AS JSON_EXTRACT_PATH_TEXT
FROM demo1
ORDER BY id;
+----------------------+------------------------+
| OLD_WAY | JSON_EXTRACT_PATH_TEXT |
|----------------------+------------------------|
| NULL | NULL |
| level_2_value | level_2_value |
| ["zero","one","two"] | ["zero","one","two"] |
+----------------------+------------------------+
이 예시는 배열을 포함해요.
SELECT
TO_VARCHAR(GET_PATH(PARSE_JSON(json_data), 'level_1_key.level_2_key[1]'))
AS OLD_WAY,
JSON_EXTRACT_PATH_TEXT(json_data, 'level_1_key.level_2_key[1]')
AS JSON_EXTRACT_PATH_TEXT
FROM demo1
ORDER BY id;
+---------+------------------------+
| OLD_WAY | JSON_EXTRACT_PATH_TEXT |
|---------+------------------------|
| NULL | NULL |
| NULL | NULL |
| one | one |
+---------+------------------------+