Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Json-节点红色提取_Javascript_Json_Node Red - Fatal编程技术网

Javascript Json-节点红色提取

Javascript Json-节点红色提取,javascript,json,node-red,Javascript,Json,Node Red,Noob正在寻求帮助 我有一个JSON数据流,如下所示 { "header" : { "content" : "telegram", "gateway" : "EN-GW", "timestamp" : "2016-08-08T13:45:47.032+0100" }, "telegram" : { "deviceId" : "01864892", "friendlyId" : "Boardroom-CO2-Sensor", "time

Noob正在寻求帮助

我有一个JSON数据流,如下所示

{
  "header" : {
    "content" : "telegram",
    "gateway" : "EN-GW",
    "timestamp" : "2016-08-08T13:45:47.032+0100"
  },
  "telegram" : {
    "deviceId" : "01864892",
    "friendlyId" : "Boardroom-CO2-Sensor",
    "timestamp" : "2016-08-08T13:45:47.032+0100",
    "direction" : "from",
    "functions" : [ {
      "key" : "humidity",
      "value" : 39.00,
      "unit" : "%"
    }, {
      "key" : "concentration",
      "value" : 830.00,
      "unit" : "ppm"
    } ],
    "telegramInfo" : {
      "data" : "4E53820E",
      "status" : "0",
      "dbm" : -67,
      "rorg" : "A5"
    }
  }
}
从这个红色节点我有一个功能节点,看起来像这样

return [msg.payload.telegram.functions];
哪个会退回这些

{ "key": "concentration", "value": 830, "unit": "ppm", "_msgid": "ff5b0f47.00a4f" }

{ "key": "humidity", "value": 39, "unit": "%", "_msgid": "ff5b0f47.00a4f" }

{ "key": "temperature", "value": 26.6, "unit": "°C", "_msgid": "ef2d6de7.10d29" }
从这些数据中,我想从每个数据中得到一个单一值,例如浓度为830。然后让它对照我在一个有两个输出的节点中设置的阈值进行检查。例如,如果超过1000个输出1,则小于1000个输出2

我想在节点红色中实现的是可能的吗


对于可能出现的NOOB问题,非常抱歉。如果您能提供任何帮助,我们将不胜感激。

问题可能是您没有返回格式良好的消息对象。虽然您从函数返回的是JSON对象,但它不符合节点RED约定

如果希望其他节点能够轻松地处理从功能节点返回的任何内容,则应该具有有效负载字段

因此,如果您将回报更改为如下所示:

return { payload: msg.payload.telegram.functions }
//check concentration exists
for (var i=0;i<msg.payload.length; i++) {
    if (msg.payload[i].concentration) {
       //more than 1000
       if (msg.payload.conentration >= 1000) {
           return {payload: 1};
       //less than 1000
       } else {
           return {payload: 0};
       }
    }
}
然后,下游节点将知道在msg.payload中查找消息的有用内容

至于比较消息中的键来设置值并输出不同的值,这相对简单。在新的功能节点中,您可以这样做:

return { payload: msg.payload.telegram.functions }
//check concentration exists
for (var i=0;i<msg.payload.length; i++) {
    if (msg.payload[i].concentration) {
       //more than 1000
       if (msg.payload.conentration >= 1000) {
           return {payload: 1};
       //less than 1000
       } else {
           return {payload: 0};
       }
    }
}
//检查浓度是否存在
对于(变量i=0;i=1000){
返回{有效载荷:1};
//不足1000
}否则{
返回{有效载荷:0};
}
}
}

问题可能是您没有返回格式良好的消息对象。虽然您从函数返回的是JSON对象,但它不符合节点RED约定

如果希望其他节点能够轻松地处理从功能节点返回的任何内容,则应该具有有效负载字段

因此,如果您将回报更改为如下所示:

return { payload: msg.payload.telegram.functions }
//check concentration exists
for (var i=0;i<msg.payload.length; i++) {
    if (msg.payload[i].concentration) {
       //more than 1000
       if (msg.payload.conentration >= 1000) {
           return {payload: 1};
       //less than 1000
       } else {
           return {payload: 0};
       }
    }
}
然后,下游节点将知道在msg.payload中查找消息的有用内容

至于比较消息中的键来设置值并输出不同的值,这相对简单。在新的功能节点中,您可以这样做:

return { payload: msg.payload.telegram.functions }
//check concentration exists
for (var i=0;i<msg.payload.length; i++) {
    if (msg.payload[i].concentration) {
       //more than 1000
       if (msg.payload.conentration >= 1000) {
           return {payload: 1};
       //less than 1000
       } else {
           return {payload: 0};
       }
    }
}
//检查浓度是否存在
对于(变量i=0;i=1000){
返回{有效载荷:1};
//不足1000
}否则{
返回{有效载荷:0};
}
}
}

谢谢你的指点!我已经这样做了,现在我得到了msg.payload的调试:未定义你知道我做错了什么吗?好的,进一步(我想)我现在收到函数:(错误)TypeError:evalmachine.:5 if(msg.payload.concentration){^无法读取未定义的属性'concentration',我刚刚编辑了答案,因为我错过了函数是数组的许多感谢我会再试一次谢谢HardillbI现在得到…[{“key”:“湿度”,“value”:39,“unit”:“%”},{“key”:“concentration”,“value”:580,“unit”:“ppm”}]From…return{payload:msg.payload.telegram.functions}但是我从调试面板的下游节点上什么也没有得到。感谢指针hardillb!我已经完成了这项工作,现在我得到了msg.payload:undefined的调试。你知道我做错了什么吗?好的,进一步(我想)我现在收到函数:(错误)TypeError:evalmachine.:5如果(msg.payload.concentration){^无法读取未定义的属性'concentration',我刚刚编辑了答案,因为我错过了函数是数组的许多感谢我会再次尝试感谢HardillbI现在得到…[{“key”:“湿度”,“value”:39,“unit”:“%”,{“key”:“concentration”,“value”:580,“unit”:”:“ppm”}]从…返回{payload:msg.payload.telegram.functions},但我从调试面板中下游的节点上什么也得不到。