函数列表

您可以在编写时序数据存储规则脚本时使用以下函数,实现多样化数据处理。函数列表包括数据类型转换函数、时间类型转换函数和基础数据类型的函数等。本文介绍函数的表达式及其使用说明。

背景信息

您可结合支持的脚本语法,调用函数将设备自定义Topic数据存储到物联网平台的时序数据存储空间。脚本的使用说明,请参见脚本语法

时序数据存储相关函数

表达式

说明

convert2HotStorageData(fields, time)

fields数据进行标准格式转换。

  • fields:要存储的数据记录,为Map或JSON类型数据。格式如下:

    {
        "key1": value1,
        "key2": value2
    }
    • key1key2为待存储的字段标识符,作为存储数据的名称。

    • value1value2为赋值给字段的设备数据,作为存储数据的具体值。

    重要

    fields中最多包含500个key

  • time:存储数据对应的时间戳,单位为毫秒,为数值型数据。

    您可使用函数timestamp()获取系统当前时间戳,也可自定义时间。

    该时间戳会赋值给fields中所有字段数据的time

转换后的标准格式为:

{
    "key1": {
        "value": value1,
        "time": timestamp()
    },
    "key2": {
        "value": value2,
        "time": timestamp()
    }
}

writeHotStorage(params)

将标准格式数据params存储到物联网平台的时序数据存储空间。

params为存储数据的标准格式数据,必须包含keyvaluetime。例如:

{
    "key1": {
        "value": value1,
        "time": 1626948134319
    },
    "key2": {
        "value": value2,
        "time": 1626948134000
    }
}
重要

params中最多包含500个key

数据类型转换函数

表达式

说明

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等。建议主动设置时区,若未设置,默认为北京时间(GMT+8)。

to_timestamp(dateString, patten, timeZone)

将指定格式的时间转换为时间戳毫秒值。返回数值类型的时间戳。

  • dateString:时间字符串。

  • patten:指定的时间格式。例如yyyy-MM-dd HH:mm:ss

  • timeZone:时区。例如GMT、UTC、CST等。建议主动设置时区,若未设置,默认为北京时间(GMT+8)。

基本数据类型支持的函数

  • 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结尾。

返回结果类型为布尔型。

productKey()

返回当前产品的ProductKey值。

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数据转换成二进制变量进行透传。

parseNumber(numberString, radix)

将字符串numberString按指定的进制radix转换为数字。

radix为可选参数,取值如下:

  • 10(默认):将字符串转换为十进制数字。

  • 2:将字符串转换为二进制数字。

  • 16:将字符串转换为十六进制数字。

例如:

// 设备上报数据。
var content = '0xFF';
// 获取待转换字符串FF.
var x = content.substring(2);
// 将FF转换为16进制数字。
var value = parseNumber(x, 16);