本文介绍日志服务支持的 JSON 函数语法及常见场景的使用示例。
说明
'time'
代表字符串,time
或 "time"
代表字段名或列名。* | SELECT message, TRY(JSON_PARSE(message))
。函数名称 | 函数语法 | 说明 |
---|---|---|
JSON_ARRAY_CONTAINS(KEY, value) | 判断 JSON 数组中是否存在特定的元素。 | |
JSON_ARRAY_GET(KEY, index) | 根据指定的 JSON 下标提取对应的 JSON 元素。 | |
JSON_ARRAY_LENGTH(KEY) | 计算 JSON 数组长度,即 JSON 元素数量。 | |
json_EXTRACT(KEY, json_path) | 从 JSON 对象或 JSON 数组中提取一组 JSON 值(数组或对象)。 | |
JSON_EXTRACT_SCALAR(KEY, json_path) | 从 JSON 形式的字符串中提取一组标量值(字符串、整数或布尔值)。 | |
JSON_FORMAT(KEY) | 将 JSON 类型转化成字符串类型。 | |
JSON_PARSE(KEY) | 将 JSON 格式的字符串转化成 JSON 类型。 | |
JSON_SIZE(KEY, json_path) | 计算 JSON 对象或 JSON 数组中元素的数量。 |
JSON_ARRAY_CONTAINS 函数用于判断 JSON 数组中是否存在特定的元素。
语法格式
JSON_ARRAY_CONTAINS(KEY, value)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为 JSON 数组格式的字符串。 |
value | JSON 元素。 |
返回值说明
返回值为 Boolean 类型。
场景
判断 JSON 数组[5, 10, 3]
中是否包含 1。
检索和分析语句
* | SELECT JSON_ARRAY_CONTAINS('[5, 10, 3]', '1')
检索和分析结果
JSON_ARRAY_GET 函数将根据指定的 JSON 下标提取对应的 JSON 元素。
语法说明
JSON_ARRAY_GET(KEY, index)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为 JSON 数组格式的字符串。 |
index | JSON 下标,从 0 开始。 |
返回值说明
返回值为 Varchar 类型。
场景
返回 JSON 数组["mon", [0, 8], "ten"]
中下标为 2 的元素。
检索和分析语句
* | SELECT JSON_ARRAY_GET('["mon", [0, 8], "ten"]', 2)
检索和分析结果
JSON_ARRAY_LENGTH 函数用于计算 JSON 数组长度,即 JSON 元素数量。
语法格式
JSON_ARRAY_LENGTH(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为 JSON 数组格式的字符串。 |
返回值说明
返回值为 Bigint 类型。
场景
计算json_test02
字段值中 JSON 元素的数量。
日志样例
检索和分析语句
* | SELECT JSON_ARRAY_LENGTH(json_test02)
检索和分析结果
JSON_EXTRACT 函数用于从 JSON 对象或 JSON 数组中提取一组 JSON 值(数组或对象)。
说明
如果分析非法的 JSON 类型,JSON_EXTRACT 函数将报错,建议您使用 JSON_EXTRACT_SCALAR 函数。
函数格式
JSON_EXTRACT(x, json_path)
参数说明
参数 | 说明 |
---|---|
x | 参数值为 JSON 对象或 JSON 数组。 |
json_path | JSON 路径,格式为 |
返回值说明
返回值为 String 类型。
场景
获取 JSON 类型字符串 '[{"SIZE":100},{"STATUS":200}]'
中 SIZE 字段的值。
检索和分析语句
* | SELECT JSON_EXTRACT('[{"SIZE":100},{"STATUS":200}}]', '$.0.SIZE')
检索和分析结果
JSON_EXTRACT_SCALAR 函数用于从 JSON 形式的字符串中提取一组标量值(字符串、整数或布尔值)。
语法格式
JSON_EXTRACT_SCALAR(json_string, json_path)
参数说明
参数 | 说明 |
---|---|
json_string | 参数值为 JSON 对象或 JSON 数组形式的字符串。 |
json_path | JSON 路径,格式为 |
返回值说明
返回值为 Varchar 类型。
场景
从 JSON 形式的字符串 [{"SIZE":100},{"STATUS":200}]
中获取 STATUS
字段的值。
检索和分析语句
*|SELECT JSON_EXTRACT_SCALAR('[{"SIZE":100},{"STATUS":200}]','$.1.STATUS')
检索和分析结果
JSON_FORMAT 函数用于将 JSON 类型转化成字符串类型。
语法格式
JSON_FORMAT(x)
参数说明
参数 | 说明 |
---|---|
x | 参数值为 JSON 类型。 |
返回值说明
返回值类型为 Varchar 类型。
场景
将 JSON 数组 [100,200,300]
转换为字符串 [100, 200, 300]
。
检索和分析语句
* | SELECT JSON_FORMAT(JSON_PARSE('[100, 200, 300]'))
检索和分析结果
JSON_PARSE 函数只用于将 JSON 格式的字符串转化成 JSON 类型。一般情况下,JSON_PARSE 函数使用意义不大,如果您需要从 JSON 中提取值,建议使用JSON_EXTRACT_SCALAR函数。
语法格式
JSON_PARSE(x)
参数说明
参数 | 说明 |
---|---|
x | 值为 JSON 格式的字符串。 |
返回值说明
返回值为 JSON 类型。
场景
提取 JSON 形式的字符串 {"SIZE":100,"STATUS":200}
中的各个子字段。
检索和分析语句
*| SELECT MAP_KEYS(TRY_CAST(JSON_PARSE('{"SIZE":100,"STATUS":200}') AS MAP(varchar, json)))
检索和分析结果
JSON_SIZE 函数用于计算 JSON 对象或 JSON 数组中元素的数量。
语法格式
JSON_SIZE(x, json_path)
参数说明
参数 | 说明 |
---|---|
x | 参数值为 JSON 对象或 JSON 数组形式的字符串。 |
json_path | JSON 路径,格式为 |
返回值说明
返回值为 Bigint 类型。
场景
返回 JSON 形式的字符串 [{"SIZE":100,"STATUS":200,"LEN":1}]
中元素的数量。
检索和分析语句
* | SELECT JSON_SIZE('[{"SIZE":100,"STATUS":200,"LEN":1}]', '$.0.LEN')
检索和分析结果