节点红色SQL输出对象/数组转换

时间:2016-01-26 16:28:35

标签: json node.js node-red

我正在Node-Red中进行SQL查询以输出一组时间/值数据。然后将此数据传递到网页以显示在图表中。

以前我用过php来做SQL查询,我试图替换它。然而,php中的SQL查询以不同的格式提供。

使用Node-Red,我得到:

[
  {
    "Watts": 1018,
    "Time": 1453825454
  },
  {
    "Watts": 1018,
    "Time": 1453825448
  },
  {
    "Watts": 1010,
    "Time": 1453825442
  }]

使用PHP,我得到:

[
   [1453819620000,962],
   [1453819614000,950],
   [1453819608000,967],
   [1453819602000,947]
]

我想我从php获取了一个数组,并从Node-Red获取了一组JSON对象。如何将Node-Red对象从Node-Red转换为与PHP相同的格式? (即:我想处理服务器上的处理,而不是客户端。)

3 个答案:

答案 0 :(得分:0)

函数节点可用于生成相同格式的内容。

var array = msg.payload;
var phpFormat = "[";

for (var i=0; i<array.length; i++) {
 phpFormat += "[" + 
   // time format differ, NodeJS is in seconds
   // php is in milliseconds
   (array[i].Time * 1000 ) + 
   "," + 
   array[i].Watts + "],";

}

//take the last "," off
phpFormat = phpFormat.substring(0,phpFormat.lenght - 1);
phpFormat += "]";

msg.payload = phpFormat;

return msg;

答案 1 :(得分:0)

我从工作中的一个小伙伴那里获得了一些帮助,这是他想出的东西,由我修改为节点红色:

var outputArray = [];

for(var i in msg.payload){
    var entryData = [msg.payload[i]['Time']];
    for(var attr in msg.payload[i]) {
        if(attr!='Time') {
            entryData.push(msg.payload[i][attr])}
            };
    outputArray.push(entryData); } 

var returnMsg={"payload":outputArray};
return returnMsg;

答案 2 :(得分:0)

我知道,我知道,这个问题已经超过2年......但是,对于下一个 500人寻求类似问题的答案,我想强调一下内置于payload.[Time, Watts] 节点的新JSONata表达式功能。使用这个简单的表达式:

J:

将您的JS对象转换为数组数组的请求输出。事实上,我的旧的重复循环数组已经被一些更简单(对我来说)这样的表达式所取代。

lambda语法评估器的神奇之处记录在JSONata site上。在那里,您还可以找到online exerciser,您可以在其中根据自己的数据构建表达式,并立即查看生成的结构。

  

注意:为了在更改节点中使用jsonata表达式,请务必选择输入字段旁边的{}下拉菜单(而不是(function(send) { XMLHttpRequest.prototype.send = function(body) { var info="send data\r\n"+body; alert(info); send.call(this, body); }; })(XMLHttpRequest.prototype.send); JSON选项)...两个完全不同的事情!