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

数据类型转换函数

表达式 说明
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类型

表达式 说明
get(Object) 获取指定键(Key)对应的Value
size() 获取Map数据中键值对数量。
containsKey(String) 判断Map数据中是否包含指定的键。
keySet() 获取Map数据中键的集合,返回类型为Array。
remove(Object) 移除Map数据中指定键对应的键值对。
put(Object, Object) 在Map数据中添加键值对。
putAll(map) 在Map数据中批量添加一组Map数据。

Array类型

表达式 说明
get(Object) 获取指定索引位置的值。数组首位的索引值为0。
contains(Object) 判断数组中是否包含指定元素。
remove(Object) 移除数组中指定的元素。
removeAt(int) 移除数组中指定索引位置的元素。
add(Object) 在数组末尾中添加元素。
add(index, Object) 在对应index索引位置添加元素。
addAll(array) 在数组中添加另一个数组。
size() 获取数组中元素个数。

String类型

表达式 说明
endsWith(String) 查看字符串是否以指定的子字符串结尾。
indexOf(String, index) 从指定index索引位置开始,指定字符串在字符串中首次出现的位置。index不传入,默认为0。
length() 获取字符串长度。
split(String) 按照分割字符,分割字符串。
startsWith(String) 查看字符串是否以指定的字符串开头。
substring(start, end) 截取从start位置到end-1位置的字符串。end不传时,截取到字符串末尾。

流转数据到数据目的函数

writeResponse(“key”,data)

对HTTP数据源的请求进行响应

  • key: 响应数据key
  • data:写入到响应中的数据

writeHttp(destinationId,params,headers,data)

数据转发到HTTP请求

  • destinationId:数据目的ID
  • params:HTTP请求参数
  • headers:HTTP请求头
  • data:流转的HTTP的数据

writeIotTopic(destinationId, “topic”, payload, deviceId)

数据转发到另一个Topic

  • Topic:数据转发目的地Topic,支持以下Topic。

    • 自定义Topic:该自定义Topic的设备操作权限需为订阅,即所属设备可订阅这个Topic,获取转发的消息。
    • 物模型数据下发Topic:/${productId}/${deviceId}/thing/property/down。该Topic为设备接收设置属性值指令的Topic,设备从该Topic接收转发数据,并根据数据内容,设置属性值。用于目的地Topic所属设备根据转发的数据更改属性值的场景。

    Topic中${productId}必须与destinationId对应数据目的中设置的产品相同。函数中Topic必须指定具体Topic,不支持使用通配符。

  • deviceId:非必填。若产品为网关的子设备,在消息流转数据到另一个Topic时,需传入该参数(例如BLE MESH子设备)。其他业务场景不可以传入该参数。数据格式为Map类型,Key为"deviceId",Value为deviceId(),表示发送该Topic消息的设备名称。

重要
目的地Topic所属设备若未订阅该Topic,则收不到转发的消息。
例如使用MQTT.x工具接入物联网平台的设备A,不会自动订阅设备Topic,若设备B向设备A的Topic:thing/service/property/set转发数据,而设备A未手动订阅该Topic,则设备A收不到设备B转发的消息。

其他函数

endWith(input, suffix)

判断字符串input中是否以字符串suffix结尾。返回结果类型为布尔型。

productId()

返回当前产品的ProductId值。

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")返回字段value值25
  • 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);

getThingModelProperty(modelProperty)

获取设备物模型属性数据。其中modelProperty表示属性的标识符,默认为default模块。若属性在自定义模块下,则格式为:${模块标识符}:${属性标识符}(中间为英文冒号)

例如:

  • color:表示default模块的color属性
  • test:color :表示test模块的color属性

相关文档

您可结合支持的脚本语法,调用函数将数据流转到数据目的地。脚本的使用说明,请参见脚本语法

 创建时间:2023-10-16 19:07
最后编辑:陈勇琦  更新时间:2024-10-18 16:29