跳到主要内容

JSON_PARSE

描述

将原始 JSON 字符串解析成 JSON 二进制格式。为了满足不同的异常数据处理需求,提供不同的 JSON_PARSE 系列函数,具体如下:

  • JSON_PARSE 解析 JSON 字符串,当输入的字符串不是合法的 JSON 字符串时,报错。
  • JSON_PARSE_ERROR_TO_INVALID 解析 JSON 字符串,当输入的字符串不是合法的 JSON 字符串时,返回 NULL。
  • JSON_PARSE_ERROR_TO_NULL 解析 JSON 字符串,当输入的字符串不是合法的 JSON 字符串时,返回 NULL。
  • JSON_PARSE_ERROR_TO_VALUE 解析 JSON 字符串,当输入的字符串不是合法的 JSON 字符串时,返回参数 default_json_str 指定的默认值。
  • JSON_PARSE_NOTNULL 解析 JSON 字符串,当输入的字符串不是合法的 JSON 字符串时,返回 NULL。

别名

  • JSONB_PARSE 同 JSON_PARSE
  • JSONB_PARSE_ERROR_TO_INVALID 同 JSON_PARSE_ERROR_TO_INVALID
  • JSONB_PARSE_ERROR_TO_NULL 同 JSON_PARSE_ERROR_TO_NULL
  • JSONB_PARSE_ERROR_TO_VALUE 同 JSON_PARSE_ERROR_TO_VALUE
  • JSONB_PARSE_NOTNULL 同 JSON_PARSE_NOTNULL

语法

JSON_PARSE (<json_str>)
JSON_PARSE_ERROR_TO_INVALID (<json_str>)
JSON_PARSE_ERROR_TO_NULL (<json_str>)
JSON_PARSE_ERROR_TO_VALUE (<json_str>, <default_json_str>)
JSONB_PARSE_NOTNULL (<json_str>)

参数

参数描述
<json_str>要提取的 JSON 类型的参数或者字段
<default_json_str>当输入的字符串不是合法的 JSON 字符串时,返回参数 default_json_str 指定的默认值。

返回值

  • json_str 为 NULL 时,都返回 NULL
  • json_str 为非法 JSON 字符串时
    • JSON_PARSE 报错
    • JSON_PARSE_ERROR_TO_INVALID 返回 NULL
    • JSON_PARSE_ERROR_TO_NULL 返回 NULL
    • JSON_PARSE_ERROR_TO_VALUE 返回参数 default_json_str 指定的默认值
    • JSON_PARSE_NOTNULL 返回 NULL

示例

  1. 正常 JSON 字符串解析
SELECT json_parse('{"k1":"v31","k2":300}');
+--------------------------------------+
| json_parse('{"k1":"v31","k2":300}') |
+--------------------------------------+
| {"k1":"v31","k2":300} |
+--------------------------------------+
SELECT json_parse_error_to_invalid('{"k1":"v31","k2":300}');
+-------------------------------------------------------+
| jsonb_parse_error_to_invalid('{"k1":"v31","k2":300}') |
+-------------------------------------------------------+
| {"k1":"v31","k2":300} |
+-------------------------------------------------------+
SELECT json_parse_notnull('{"a":"b"}');
+----------------------------------+
| jsonb_parse_notnull('{"a":"b"}') |
+----------------------------------+
| {"a":"b"} |
+----------------------------------+
SELECT json_parse_error_to_value('{"k1":"v31","k2":300}','{}');
+-----------------------------------------------------------+
| jsonb_parse_error_to_value('{"k1":"v31","k2":300}', '{}') |
+-----------------------------------------------------------+
| {"k1":"v31","k2":300} |
+-----------------------------------------------------------+
  1. 非法 JSON 字符串解析
SELECT json_parse('invalid json');
ERROR 1105 (HY000): errCode = 2, detailMessage = json parse error: Invalid document: document must be an object or an array for value: invalid json
SELECT json_parse_error_to_invalid('invalid json');
+----------------------------------------------+
| jsonb_parse_error_to_invalid('invalid json') |
+----------------------------------------------+
| NULL |
+----------------------------------------------+
SELECT json_parse_notnull('invalid json');
+-------------------------------------------+
| jsonb_parse_error_to_null('invalid json') |
+-------------------------------------------+
| NULL |
+-------------------------------------------+
SELECT json_parse_error_to_value('invalid json', '{}');
+--------------------------------------------------+
| json_parse_error_to_value('invalid json', '{}') |
+--------------------------------------------------+
| {} |
+--------------------------------------------------+