类别:

半结构化和结构化数据函数 (提取)

JSON_EXTRACT_PATH_TEXT

将第一个实参解析为 JSON 字符串,并返回第二个实参中的路径指向的元素的值。这等同于 TO_VARCHAR(GET_PATH(PARSE_JSON(JSON), PATH))

语法

JSON_EXTRACT_PATH_TEXT( <column_identifier> , '<path_name>' )
Copy

实参

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"]}}';
Copy

使用 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"]} |
+--------------------------------------+--------------------------------------+
Copy

使用 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"]   |
+----------------------+------------------------+
Copy

此示例包含一个数组:

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                    |
+---------+------------------------+
Copy
语言: 中文