- 数据类型转换函数
- 时间类型转换函数
- 基本数据类型支持的函数
- Map类型
- Array类型
- String类型
- 流转数据到数据目的函数
- writeResponse(“key”,data)
- writeHttp(destinationId,params,headers,data)
- writeIotTopic(destinationId, “topic”, payload, deviceId)
- 其他函数
- endWith(input, suffix)
- productId()
- getDeviceTag(key) —— 暂不支持
- getOrNull(data, “items”, ……)
- payload(textEncoding)
- parseNumber(numberString, radix)
- getThingModelProperty(modelProperty)
- 相关文档
您可以在编写解析器脚本时使用以下函数,实现多样化数据处理。函数列表包括数据类型转换函数、流转数据到数据目的函数和基础数据类型的函数等。本文介绍函数的表达式及其使用说明。
数据类型转换函数
表达式 | 说明 |
---|---|
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属性
相关文档
您可结合支持的脚本语法,调用函数将数据流转到数据目的地。脚本的使用说明,请参见脚本语法。
最后编辑:陈勇琦 更新时间:2024-10-18 16:29