物联网平台提供的脚本解析器,类似于JavaScript语言,与SQL表达式相比,可加工处理复杂消息数据和云产品交互。脚本语言的解析能力包括获取消息内容、转换数据格式、处理字符串、组装JSON格式数据、处理二进制数据和流转数据等。本文介绍如何编写解析脚本。

背景信息

物联网平台是基于Topic中的数据格式来处理和传递数据的,数据格式的具体内容,请参见数据格式

脚本示例

本文以上报的属性数据为例,输入数据如下:

{
    "deviceType": "CustomCategory",
    "iotId": "JCp9***",
    "requestId": "1626948228247",
    "checkFailedData": {

    },
    "productKey": "a1o***",
    "gmtCreate": 1626948134445,
    "deviceName": "Device1",
    "items": {
        "Temperature": {
            "value": 38,
            "time": 1626948134319
        },
        "Humidity": {
            "value": 25,
            "time": 1626948134319
        }
    }
}

解析和处理数据的示例如下:

//通过payload函数,获取设备上报的消息内容,并按照JSON格式转换。
var data = payload("json"); 
//筛选出上报的温湿度值。
var h = data.items.Humidity.value;
var t = data.items.Temperature.value;
// 设置温度值大于38时触发规则,转发数据到云数据库RDS。
// RDS表结构为id[自增主键]、deviceName、temperature、humidity、time,在writeRds方法中,可以按column:value的形式,将值写入对应的列。
if (t > 38) { 
    writeRds(1000, {"devcieName":deviceName(), "temperature":t, "time":timestamp(), "humidity":h});  
}
注意 上报的JSON数据格式,为数组或者嵌套的JSON。脚本文件中支持使用JSONPath获取其中的属性值。例如以上示例使用data.items.Humidity.value,获取到值25;使用data.iotId,获取到值JCp9***

有关JSONPath的更多信息,请参见LanguageManual UDF

标识符

代码中常量、变量和其他自定义字段,需使用标识符定义。标识符支持大小写英文字母、数字和下划线(_),不能以数字开头。

以下关键词和保留字不能作为标识符使用。

  • 关键词:forbreakcontinueifelsetruefalsevarnewnullreturn
  • 保留字:breakdoinstanceoftypeofcasecatchfinallyvoidswitchwhiledebuggerfunctionthiswithdefaultthrowdeleteintryasfromclassenumextendssuperconstexportimportawaitimplementsletletprivatepublicinterfacepackageprotectedstaticyield

数据类型

代码中常量、变量和其他自定义字段支持数据类型有:Number、Boolean、String、Byte、Map、Array。

常量可取值为null,数值型常量的取值类型包括十进制整型、十六进制整型和浮点型。

流程控制语句

物联网平台支持使用for循环和if...else条件语句。其中for循环,支持使用关键词break(跳出循环)和continue(跳出本次循环)。

操作符

  • 逻辑运算:&&||

    逻辑条件结果为非布尔型时,null(空值)表示false,否则为true。例如null && "x" 返回false,null || "x"返回true。

  • 数学运算:*/%+-

    操作数据必须为数值型,否则会抛出异常。

  • 条件判断:>=><<===(仅支持值比较)、!=

注释

脚本中支持多行注释(/* ${comments}*/)和单行注释(// ${comments} )。

相关文档

脚本中支持使用的函数说明,请参见函数列表