您可以在编写解析器脚本时使用以下函数,实现多样化数据处理。函数列表包括数据类型转换函数、流转数据到数据目的函数和基础数据类型的函数等。本文介绍函数的表达式及其使用说明。

除本文支持的函数表达式外,云产品流转新版的解析器脚本中还支持旧版的函数。详细内容,请参见数据流转支持的函数

数据类型转换函数

表达式 说明
toBoolean(Object) Object值转换为Boolean值。参数支持以下类型的取值:
  • Boolean:返回对应的布尔值。
  • Number:参数为0,返回false。否则,返回true。
  • String:参数为"true",返回true。否则,返回false。
  • 参数值为null:返回false。
toNumber(Object) Object值转换为Number值。参数支持以下类型的取值:
  • Boolean:参数为true,返回1,参数为false,返回0。
  • Number:返回对应的数值。
  • String:按照数值类型解析。
  • 参数值为null:返回0。
toString(Object) Object值转换为String值。

参数为任意值,返回对应String值。参数值为null,返回空字符。

当参数为二进制类型时,按照UTF-8编码返回对应值。

toMap(Object) Object值转换为Map值。参数支持以下类型的取值:
  • Map:返回对应的值。
  • String:按照JSON格式解析为Map。
  • 参数值为null:返回空Map。
toArray(Object) Object值转换为Array值。参数支持以下类型的取值:
  • Array:返回对应的值。
  • String:按照JSON格式解析为Array。
  • 参数值为null:返回空Array。
toBinary(Object) Object值转换为二进制值。参数支持以下类型的取值:
  • Binary:返回对应的值。
  • String:按照UTF-8编码返回值。
  • 参数值为null:返回空Binary。

时间类型转换函数

函数表达式 说明
format_date(timestamp, patten, timeZone) 将时间戳毫秒值转换为指定格式的时间。返回String类型的时间。
  • timestamp:时间戳毫秒值。
  • patten:待转换的时间格式。例如yyyy-MM-dd HH:mm:ss
  • timeZone:时区。例如GMT、UTC、CST等。可为空,默认为当前系统所在时区。
to_timestamp(dateString, patten, timeZone) 将指定格式的时间转换为时间戳毫秒值。返回数值类型的时间戳。
  • dateString:时间字符串。
  • patten:指定的时间格式。例如yyyy-MM-dd HH:mm:ss
  • timeZone:时区。例如GMT、UTC、CST等。可为空,默认为当前系统所在时区。

流转数据到数据目的函数

以下函数表达式中的入参destinationId是数据目的ID,payload是消息内容。

函数表达式 说明
writeAmqp(destinationId, payload, tag) 流转数据到AMQP消费组。

tag:可选参数。设置tag后,所有通过该操作流转到AMQP服务端订阅消费组里的消息都会携带该tag

tag长度不超过128个字符,可以输入常量或变量。
  • 常量支持输入中文汉字、英文字母、数字。
  • 变量代表解析脚本处理后的JSON数据中key对应的value值。如果取不到value值,则消息不携带tag。
writeDatahub(destinationId, data) 流转数据到DataHub。

data:写入DataHub的数据。仅支持Map和Binary类型数据。

writeFc(destinationId, data) 流转数据到函数计算(FC)。

data:流转到FC的数据。

writeKafka(destinationId, payload, key) 流转数据到消息对列Kafka。

key:可选参数,流转到Kafka Topic消息中携带的key。

您可以在Kafka消息消费端,通过标签进行消息路由。

writeMns(destinationId, payload) 流转数据到消息服务(MNS)。
writeMq(destinationId, payload, tag) 流转数据到消息队列(RocketMQ)。

tag:可选参数。设置标签后,所有通过该操作流转到RocketMQ对应Topic里的消息都会携带该标签。您可以在RocketMQ消息消费端,通过标签进行消息过滤。

tag长度不超过128个字符,可以输入常量或变量。
  • 常量支持输入中文汉字、英文字母、数字。
  • 变量代表解析脚本处理后的JSON数据中key对应的value值。如果取不到value值,则消息不携带tag。
writeTableStore(destinationId, data) 流转数据到表格存储(Tablestore)。

data:写入表格存储的数据。仅支持Map类型数据,其中键(Key)值对应表格列名,值(Value)对应列值。

data中必须包含Tablestore的主键。

writeRds(destinationId, data) 流转数据到云数据库RDS。

data:写入云数据库表的数据。仅支持Map类型数据,其中键(Key)值对应数据库表列名,值(Value)对应列值。

writeTsdb(destinationId, timestamp, metricName, value, tag) 流转数据到时序数据库(TSDB)或实例内的时序数据库中。
  • timestamp:时间戳。
  • metricName:TSDB中存储的指标名称。
  • value:TSDB中存储的数据点值。支持String和Map类型数据。
  • tag:设置标记数据的标签键值对,Map类型数据。
writeIotTopic(destinationId, topic, payload) 流转数据到另一个Topic。

Topic:数据转发目的地Topic,其中ProductKey必须与destinationId对应数据目的中设置的产品相同。更多信息,请参见创建数据目的

基本数据类型支持的函数

  • Map类型
    表达式 说明
    [Object] 获取指定键(Key)对应的Value
    size() 获取Map数据中键值对数量。
    containKey(String) 判断Map数据中是否包含指定的键。
    keySet() 获取Map数据中键的集合,返回类型为Array。
    remove(Object) 移除Map数据中指定键对应的键值对。
    put(Object, Object) 在Map数据中添加键值对。
    putAll(map) 在Map数据中批量添加一组Map数据。
  • Array类型。
    函数 说明
    [int] 获取指定索引位置的值。数组首位的索引值为0。
    contains(Object) 判断数组中是否包含指定元素。
    remove(Object) 移除数组中指定的元素。
    removeAt(int) 移除数组中指定索引位置的元素。
    add(Object) 在数组末尾中添加元素。
    add(index, Object) 在对应index索引位置添加元素。
    addAll(array) 在数组中添加另一个数组。
    size() 获取数组中元素个数。
  • String类型。
    函数 说明
    substring(start, end) 截取从start位置到end-1位置的字符串。end不传时,截取到字符串末尾。
    length() 获取字符串长度。
    split(String) 按照分割字符,分割字符串。
    startsWith(String) 查看字符串是否以指定的字符串开头。
    endsWith(String) 查看字符串是否以指定的子字符串结尾。
    indexOf(String, index) 从指定index索引位置开始,指定字符串在字符串中首次出现的位置。

    index不传入,默认为0。

其他函数

表达式 说明
endWith(input, suffix) 判断字符串input中是否以字符串suffix结尾。

返回结果类型为布尔型。

getDeviceTag(key) 返回key所对应的设备标签。如果设备没有该key对应的标签,则返回值为空。
getOrNull(data, "items", ......) 返回JSON格式数据data中指定字段的值。

该函数中传入的字段个数没有限制,但必须逐级传入。函数返回最后一个字段的值,若最后一个字段不存在或值为空,则函数返回值为null。

例如data中数据:

"items": {
    "Humidity": {
        "value": 25,
        "time": 1626948134319
    }
}

函数示例如下:

  • getOrNull(data, "items")返回字段items"Humidity": {"value": 25,"time": 1626948134319}
  • getOrNull(data, "items", "Humidity", "value")返回字段value25
  • getOrNull(data, "items", "Temperature"),字段Temperature不存在,返回值null。
payload(textEncoding) 返回设备发布消息payload的转义数据。textEncoding表示payload的转义字符编码,取值如下:
  • 不传入参数:默认按照UTF-8编码转换为字符串,即payload()等价于payload('utf-8')
  • 'json':将payload数据转换成Map格式变量。如果payload不是JSON格式,则返回异常。
  • 'binary':将payload数据转换成二进制变量进行透传。