JSON_PARSE
描述
将原始 JSON 字符串解析成 JSON 二进制格式。为了满足不同的异常数据处理需求,提供不同的 JSON_PARSE 系列函数,具体如下:
JSON_PARSE解析 JSON 字符串,当输入的字符串不是合法的 JSON 字符串时,报错。JSON_PARSE_ERROR_TO_NULL解析 JSON 字符串,当输入的字符串不是合法的 JSON 字符串时,返回 NULL。JSON_PARSE_ERROR_TO_VALUE解析 JSON 字符串,当输入的字符串不是合法的 JSON 字符串时,返回参数 default_json_value 指定的默认值。
语法
JSON_PARSE (<json_str>)
JSON_PARSE_ERROR_TO_NULL (<json_str>)
JSON_PARSE_ERROR_TO_VALUE (<json_str>, <default_json_value>)
参数
必须参数
<json_str>String 类型,其内容应是合法的 JSON 字符串。
可选参数
<default_json_value>JSON 类型,可以是 NULL,当<json_str>解析失败时,<default_json_value>作为默认值返回。
返回值
Nullable<JSON> 返回解析后得到的 JSON 对象
使用说明
- 如果
<json_str>是 NULL,得到的结果也是 NULL。 JSONB_PARSE/JSONB_PARSE_ERROR_TO_NULL/JSONB_PARSE_ERROR_TO_VALUE行为基本一致,只是在解析失败时得到的结果不同。
示例
- 正常 JSON 字符串解析
SELECT json_parse('{"k1":"v31","k2":300}');+-------------------------------------+
| json_parse('{"k1":"v31","k2":300}') |
+-------------------------------------+
| {"k1":"v31","k2":300} |
+-------------------------------------+SELECT json_parse_error_to_null('{"k1":"v31","k2":300}','{}');+---------------------------------------------------+
| json_parse_error_to_null('{"k1":"v31","k2":300}') |
+---------------------------------------------------+
| {"k1":"v31","k2":300} |
+---------------------------------------------------+SELECT json_parse_error_to_value('{"k1":"v31","k2":300}','{}');+---------------------------------------------------------+
| json_parse_error_to_value('{"k1":"v31","k2":300}','{}') |
+---------------------------------------------------------+
| {"k1":"v31","k2":300} |
+---------------------------------------------------------+SELECT json_parse_error_to_value('{"k1":"v31","k2":300}', NULL);+----------------------------------------------------------+
| json_parse_error_to_value('{"k1":"v31","k2":300}', NULL) |
+----------------------------------------------------------+
| {"k1":"v31","k2":300} |
+----------------------------------------------------------+ - 非法 JSON 字符串解析
SELECT json_parse('invalid json');ERROR 1105 (HY000): errCode = 2, detailMessage = [INVALID_ARGUMENT]Parse json document failed at row 0, error: [INTERNAL_ERROR]simdjson parse exception:SELECT json_parse_error_to_null('invalid json');+------------------------------------------+
| json_parse_error_to_null('invalid json') |
+------------------------------------------+
| NULL |
+------------------------------------------+SELECT json_parse_error_to_value('invalid json');+-------------------------------------------+
| json_parse_error_to_value('invalid json') |
+-------------------------------------------+
| {} |
+-------------------------------------------+SELECT json_parse_error_to_value('invalid json', '{"key": "default value"}');+-----------------------------------------------------------------------+
| json_parse_error_to_value('invalid json', '{"key": "default value"}') |
+-----------------------------------------------------------------------+
| {"key":"default value"} |
+-----------------------------------------------------------------------+SELECT json_parse_error_to_value('invalid json', NULL);+-------------------------------------------------+
| json_parse_error_to_value('invalid json', NULL) |
+-------------------------------------------------+
| NULL |
+-------------------------------------------------+ - NULL 参数
SELECT json_parse(NULL);+------------------+
| json_parse(NULL) |
+------------------+
| NULL |
+------------------+SELECT json_parse_error_to_null(NULL);+--------------------------------+
| json_parse_error_to_null(NULL) |
+--------------------------------+
| NULL |
+--------------------------------+SELECT json_parse_error_to_value(NULL, '{}');+---------------------------------------+
| json_parse_error_to_value(NULL, '{}') |
+---------------------------------------+
| NULL |
+---------------------------------------+