添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
JSON函数

JSON函数

本文介绍 JSON 函数的基本语法及示例。

日志服务支持如下 JSON 函数。

重要
  • 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如: 'status' 表示字符串 status, status "status" 表示日志字段 status。

  • 如果日志字段的值为 JSON 类型且需要展开为多行,请使用 unnest 语法。更多信息,请参见 UNNEST 子句

  • 如果字符串被解析成 JSON 类型失败,则返回 null。

  • 如果在采集过程中,JSON 日志被截断,则在使用 JSON 函数进行查询与分析时,系统将报错且中止查询与分析。针对该错误,您可以使用 TRY 表达式捕获异常信息,使得系统继续执行查询和分析操作。例如 * | select message, try(json_parse(message)) 。更多信息,请参见 TRY 表达式

函数名称

语法

说明

支持 SQL

支持 SPL

json_array_contains 函数

json_array_contains( x , value )

判断 JSON 数组中是否包含某个值。

json_array_get 函数

json_array_get( x , index )

获取 JSON 数组中某个下标对应的元素。

×

json_array_length 函数

json_array_length( x )

计算 JSON 数组中元素的数量。

json_extract 函数

json_extract( x , json_path)

JSON 对象或 JSON 数组中提取一组 JSON 值(数组或对象)。

json_extract_scalar 函数

json_extract_scalar( x , json_path )

JSON 对象或 JSON 数组中提取一组标量值(字符串、整数或布尔值)。类似于 json_extract 函数。

json_extract_bool 函数

json_extract_bool(x, json_path)

JSON 对象或 JSON 数组中提取 boolean 值。

×

json_extract_long 函数

json_extract_long(x, json_path)

JSON 对象或 JSON 数组中提取 bigint 值。

×

json_extract_double 函数

json_extract_double(x, json_path)

JSON 对象或 JSON 数组中提取 double 值。

×

json_format 函数

json_format( x )

JSON 类型转换为字符串类型。

json_parse 函数

json_parse( x )

把字符串类型转换为 JSON 类型。

json_size 函数

json_size( x , json_path )

计算 JSON 对象或数组中元素的数量。

json_object_flatten 函数

json_object_flatten(x)

JSON 对象压缩为单层键值结构。

×

json_array_contains 函数

json_array_contains 函数用于判断 JSON 数组中是否包含某个值。

语法

json_array_contains(x, value)

参数说明

参数

说明

x

参数值为 JSON 数组。

value

数值。

返回值类型

boolean 类型。

示例

判断 JSON 数组[1, 2, 3]中是否包含 2。

  • 查询和分析语句( 调试

    * | SELECT json_array_contains('[1, 2, 3]', 2)
  • 查询和分析结果 json_array_contains

json_array_get 函数

json_array_get 函数用于获取 JSON 数组下标对应的元素。

语法

json_array_get(x, index)

参数说明

参数

说明

x

参数值为 JSON 数组。

index

JSON 下标,从 0 开始。

返回值类型

varchar 类型。

示例

返回 JSON 数组["a", [3, 9], "c"]下标为 1 的元素。

  • 查询和分析语句( 调试

    * | SELECT json_array_get('["a", [3, 9], "c"]', 1)
  • 查询和分析结果 json_array_get

json_array_length 函数

json_array_length 函数用于计算 JSON 数组中元素的数量。

语法

json_array_length(x)

参数说明

参数

说明

x

参数值为 JSON 数组。

返回值类型

bigint 类型。

示例

  • 示例 1:计算 Results 字段值中 JSON 元素的数量。

    • 字段样例

      Results:[{"EndTime":1626314920},{"FireResult":2}]
    • 查询和分析语句

      * | SELECT json_array_length(Results)
    • 查询和分析结果 json_array_length

  • 示例 2:计算 time 字段值中 JSON 元素的数量。

    • 字段样例

      time:["time_local","request_time","upstream_response_time"]
    • 查询和分析语句

      * | SELECT json_array_length(time)
    • 查询和分析结果 json_array_length

json_extract 函数

json_extract 函数用于从 JSON 对象或 JSON 数组中提取一组 JSON 值(数组或对象)。

重要

针对非法的 JSON 类型,json_extract 函数会报错,建议您使用 json_extract_scalar 函数。

语法

json_extract(x, json_path)

参数说明

参数

说明

x

参数值为 JSON 对象或 JSON 数组。

json_path

JSON 路径,格式为$.store.book[0].title。更多信息,请参见 如何设置 json_path

返回值类型

JSON 格式的 string 类型。

示例

SQL

获取 Results 字段中 EndTime 字段的值。

  • 字段样例

    Results:[{"EndTime":1626314920},{"FireResult":2}]
  • 查询和分析语句

    * | SELECT json_extract(Results, '$.0.EndTime')
  • 查询和分析结果 json_extract

SPL

获取 Results 字段中 EndTime 字段的值。

  • 字段样例

Results:[{"EndTime":1626314920},{"FireResult":2}]
  • SPL 语句

* | extend a = json_extract(Results, '$.0.EndTime')
  • SPL 结果

image.png

json_extract_scalar 函数

json_extract_scalar 函数用于从 JSON 对象或 JSON 数组中提取一组标量值(字符串、整数或布尔值)。

语法

json_extract_scalar(x, json_path)

参数说明

参数

说明

x

参数值为 JSON 对象或 JSON 数组。

json_path

JSON 路径,格式为$.store.book[0].title。更多信息,请参见 如何设置 json_path

返回值类型

varchar 类型。

示例

SQL

Results 字段中获取 RawResultCount 字段的值,并将该值转换为 bigint 类型进行求和。

  • 字段样例

    Results:[{"EndTime":1626314920},{"RawResultCount":1}]
  • 查询和分析语句

    * | SELECT sum(cast(json_extract_scalar(Results,'$.1.RawResultCount') AS bigint) )
  • 查询和分析结果 json_extract_scalar

SPL

Results 字段中获取 RawResultCount 字段的值。

  • 字段样例

Results:[{"EndTime":1626314920},{"RawResultCount":1}]
  • SPL 语句

* | extend a = json_extract_scalar(Results, '$.1.RawResultCount')
  • SPL 结果 image.png

json_extract_bool 函数

json_extract_bool 函数用于从 JSON 对象或 JSON 数组中提取 boolean 值,提取失败返回 null

语法

json_extract_bool(x, json_path)

参数说明

参数

说明

x

参数值为 JSON 类型。

json_path

JSON 路径,格式为$.store.book[0].title。更多信息,请参见 如何设置 json_path

返回值类型

boolean 类型。

示例

JSON 数组 Results 中提取 boolean 值。

  • 字段样例

    Results:[{"ret":true},{"status":FALSE}]
  • 查询和分析语句

    * | SELECT json_extract_bool(Results, '$.0.ret')
  • 查询和分析结果

    image

json_extract_long 函数

json_extract_long 函数用于从 JSON 对象或 JSON 数组中提取 bigint 值,提取失败返回 null

语法

json_extract_long(x, json_path)

参数说明

参数

说明

x

参数值为 JSON 类型。

json_path

JSON 路径,格式为$.store.book[0].title。更多信息,请参见 如何设置 json_path

返回值类型

bigint 类型。

示例

JSON 数组 Results 中提取 bigint 值。

  • 字段样例

    Results:[{"EndTime":1626314920},{"FireResult":2}]
  • 查询和分析语句

    * | SELECT json_extract_long(Results, '$.0.EndTime')
  • 查询和分析结果

    image

json_extract_double 函数

json_extract_double 函数用于从 JSON 对象或 JSON 数组中提取 double 值,提取失败返回 null

语法

json_extract_double(x, json_path)

参数说明

参数

说明

x

参数值为 JSON 类型。

json_path

JSON 路径,格式为$.store.book[0].title。更多信息,请参见 如何设置 json_path

返回值类型

double 类型。

示例

JSON 数组 Results 中提取 double 值。

  • 字段样例

    Results:[{"EndTime":1626314920},{"FireResult":2}]
  • 查询和分析语句

    * | SELECT json_extract_double(Results, '$.0.EndTime')
  • 查询和分析结果

    image

json_format 函数

json_format 函数用于将 JSON 类型转化成字符串类型。

语法

json_format(x)

参数说明

参数

说明

x

参数值为 JSON 类型。

返回值类型

varchar 类型。

示例

JSON 数组[1,2,3]转换为字符串[1, 2, 3]。

  • 查询和分析语句( 调试

    * | SELECT json_format(json_parse('[1, 2, 3]'))
  • 查询和分析结果 json_format

json_parse 函数

json_parse 函数只用于将字符串类型转化成 JSON 类型,判断是否符合 JSON 格式。一般情况下,json_parse 函数使用意义不大,如果您需要从 JSON 中提取值,建议使用 json_extract_scalar 函数。

语法

json_parse(x)

参数说明

参数

说明

x

参数值为字符串。

返回值类型

JSON 类型。

示例

SQL

  • 示例 1

    将字符串[1,2,3]转换为 JSON 数组[1, 2, 3]。

    • 查询和分析语句( 调试

       * | SELECT json_parse('[1, 2, 3]')
    • 查询和分析结果 json_format

  • 示例 2

    提取 logging 字段中的各个子字段。

    • 字段样例 json_parse

    • 查询和分析语句( 调试

      *| SELECT map_keys(try_cast(json_parse(logging) AS map(varchar, json)))
    • 查询和分析结果 json_parse

SPL

将字符串 [1,2,3] 转换为 JSON 数组 [1, 2, 3]

  • SPL 语句

 * | extend a = json_parse('[1, 2, 3]')
  • SPL 结果

image.png

json_size 函数

json_size 函数用于计算 JSON 对象或 JSON 数组中元素的数量。

语法

json_size(x, json_path)

参数说明

参数

说明

x

参数值为 JSON 对象或 JSON 数组。

json_path

JSON 路径,格式为$.store.book[0].title。更多信息,请参见 如何设置 json_path

返回值类型

bigint 类型。

示例

返回 status 字段中元素的数量。

  • 字段样例

    Results:[{"EndTime":1626314920,"FireResult":2,"RawResults":[{"_col0":"1094"}]}]
  • 查询和分析语句

    * | SELECT json_size(Results, '$.0.RawResults')
  • 查询和分析结果 json_size

json_object_flatten 函数

json_object_flatten 函数用于将 JSON 对象压缩为单层键值结构。

语法

json_object_flatten(x)

参数说明

参数

说明

x

参数值为 JSON 类型。如果 JSON 对象非 Object,则返回 null。

返回值类型

map(varchar, varchar)类型。

示例

content 字段 JSON 内容压缩为 1 层键值对。

  • 字段样例

    content: '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}'
  • 查询和分析语句

    select json_object_flatten(content) as data from  (values '{"Time":1626314920,"Info":[{"count":"1"}],"Body":"this is test"}') t (content) limit 1;
  • 输出数据

    image.png