本文介绍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_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)
返回结果为求和结果。
- content字段是一个JSON对象,从该对象中获取status字段的值。
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) )
返回结果为求和结果。
- content字段是一个JSON对象,从该对象中获取status字段的值。
json_size()
json_size()函数用于计算JSON对象或JSON数组中元素的数量。
- 语法
json_size(json,json_path)
- 示例
返回status字段中元素的数量。
* | SELECT json_size('{"status":[1, 2, 3]}','$.status')
返回结果为3。