本文介绍JSON函数的基本语法及示例。
- 如果字符串被解析成JSON类型失败,则返回null。
- 在日志服务分析语句中,使用单引号('')包裹的JSON数组表示字符串。
- 如果日志字段的值为JSON类型且需要展开为多行,请使用unnest语法。更多信息,请参见 unnest语法 。
json_parse()函数
json_parse()函数用于将字符串转化成JSON类型,返回结果为JSON类型。
-
语法
json_parse(string)
-
示例
将字符串[1, 2, 3]转换为JSON数组[1,2,3]。
* | SELECT json_parse('[1, 2, 3]')
返回结果为[1,2,3]。
json_format()
json_format()函数用于将JSON类型转化成字符串,返回结果为字符串。
-
语法
json_format(json)
-
示例
将JSON数组[1,2,3]转换为字符串[1, 2, 3]。
* | SELECT json_format(json_parse('[1, 2, 3]'))
返回结果为[1,2,3]。
json_array_contains()
json_array_contains()函数用于判断JSON数组或JSON字符串中是否包含某个值,返回结果为true或者false。
-
语法
json_array_contains(json , value)
-
示例
-
判断JSON数组[1, 2, 3]中,是否包含2。
* | SELECT json_array_contains(json_parse('[1, 2, 3]'), 2)
返回结果为true。
-
判断JSON字符串[1, 2, 3]中,是否包含2。
* | SELECT json_array_contains('[1, 2, 3]', 2)
返回结果为true。
-
判断JSON数组[1, 2, 3]中,是否包含2。
json_array_get()
json_array_get()函数用于获取JSON数组下标对应的元素。
-
语法
json_array_get(json_array, index)
-
示例
返回JSON数组["status", "request_time", "request_method"]下标为0的元素。
* | SELECT json_array_get('["status", "request_time", "request_method"]', 0)
返回结果为status。
json_array_length()
json_array_length()函数用于计算JSON数组中元素的数量。
-
语法
json_array_length(json array)
-
示例
计算JSON数组["status", "request_time", "request_method"]中的元素数量。
* | SELECT json_array_length('["status", "request_time", "request_method"]')
返回结果为3。
json_extract()
json_extract()函数用于从JSON对象中提取目标字段的值,返回结果为JSON类型。
-
语法
json_extract(json, json_path)
json_path 格式为$.store.book[0].title
。 -
示例
-
content 字段是一个JSON对象,从该对象中获取status 字段的值。* | SELECT json_extract(content, '$.status')
返回结果为
status 字段的值,例如 "200" 。 -
request_time 字段值为JSON数组,将该数组展开并使用row 引用展开后的列。然后从row中获取status 字段的值进行求和。* | select sum(cast (json_extract_scalar(row, '$.status') as bigint) ) from log, unnest(cast(json_parse(request_time) as array(json) ) as t(row)
返回结果为求和结果。
-
json_extract_scalar()
json_extract_scalar()函数用于从JSON对象中提取目标字段的值,返回结果为字符串。
-
语法
json_extract_scalar(json, json_path)
json_path 格式为$.store.book[0].title
。 -
示例
-
content 字段是一个JSON对象,从该对象中获取status 字段的值。* | SELECT json_extract_scalar(content, '$.status')
返回结果为
status 字段的值,例如 200 。 -
content 字段是一个JSON对象,从该对象中获取status 字段的值,并将该值转换为BIGINT类型进行求和。* | select sum( cast (json_extract_scalar(content, '$.status') as bigint) )
返回结果为求和结果。
-
json_size()
json_size()函数用于计算JSON对象或JSON数组中元素的数量。
-
语法
json_size(json,json_path)
-
示例
返回
status 字段中元素的数量。* | SELECT json_size('{"status":[1, 2, 3]}','$.status')
返回结果为3。