- 类别:
半结构化和结构化数据函数 (提取)
JSON_EXTRACT_PATH_TEXT¶
将第一个实参解析为 JSON 字符串,并返回第二个实参中的路径指向的元素的值。这等同于 TO_VARCHAR(GET_PATH(PARSE_JSON(JSON), PATH))
语法¶
JSON_EXTRACT_PATH_TEXT( <column_identifier> , '<path_name>' )
实参¶
column_identifier
要提取数据列的名称。
path_name
一个字符串,其中包含要提取元素的路径。
返回¶
返回值的数据类型是 VARCHAR。
使用说明¶
如果路径名与任何元素不对应,则该函数返回 NULL。
路径名语法是标准 JavaScript 表示法;它由字段名称(标识符)和句点(例如
.
)以及索引运算符(例如[<index>]
)连接而成:第一个字段名称不需要指定前导句点。
索引运算符中的索引值可以是非负整数(用于数组),也可以是放在单引号或双引号内的字符串字面量(用于对象字段)。
有关更多详细信息,请参阅 查询半结构化数据。
为了保持语法一致性,路径表示法还支持 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"]} | +--------------------------------------+--------------------------------------+
使用 JSON_EXTRACT_PATH_TEXT,可以使用 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 | +---------+------------------------+