2016-03-03 34 views
0

當前正在Node-RED上創建一個運行在Node.js上的ETL流,它運行在CloudFoundry上運行的Bluemix上。如何將包含在一條消息中的JSON數組轉換爲多個JSON對象消息?

我在查詢一個Cloudant數據庫,並獲取包含所有文檔作爲JSON對象的單個JSON數組返回的查詢結果。

不,我想單獨處理那些穿着管道的時尚。這怎麼能在Node-RED中實現?

非常感謝!

JSON

[{ 
    "id": "c8342b2a.bf0df", 
    "type": "cloudant in", 
    "z": "2f0a54f6.110ccc", 
    "service": "nokeredrkie-cloudantNoSQLDB", 
    "cloudant": "", 
    "name": "", 
    "database": "tweets", 
    "search": "_all_", 
    "design": "", 
    "index": "", 
    "x": 295.70001220703125, 
    "y": 450.9333190917969, 
    "wires": [ 
    ["5e83a34.48cdd5c"] 
    ] 
}, { 
    "id": "c9411e75.2b1b7", 
    "type": "debug", 
    "z": "2f0a54f6.110ccc", 
    "name": "", 
    "active": true, 
    "console": "false", 
    "complete": "payload", 
    "x": 646.699951171875, 
    "y": 470.7333679199219, 
    "wires": [] 
}, { 
    "id": "3f1d2018.8f5ec8", 
    "type": "inject", 
    "z": "2f0a54f6.110ccc", 
    "name": "", 
    "topic": "", 
    "payload": "", 
    "payloadType": "date", 
    "repeat": "", 
    "crontab": "", 
    "once": true, 
    "x": 126.70001220703125, 
    "y": 472.6666564941406, 
    "wires": [ 
    ["c8342b2a.bf0df"] 
    ] 
}, { 
    "id": "5e83a34.48cdd5c", 
    "type": "function", 
    "z": "2f0a54f6.110ccc", 
    "name": "", 
    "func": "//msg.payload = JSON.parse(msg.payload);\nmsg.payload = msg.payload[1].tweet.user.screen_name;\nreturn msg;", 
    "outputs": 1, 
    "noerr": 0, 
    "x": 444.70001220703125, 
    "y": 489.4000549316406, 
    "wires": [ 
    ["c9411e75.2b1b7"] 
    ] 
}] 
+0

JSON.parse該字符串,然後使用數組方法 –

+0

如果我理解正確,你想要移動單個對象到一個新的變量。我對嗎? – Rajesh

回答

1

輸出的Cloudant節點的是這樣功能節點

var msgs = []; 
for (var i = 0; i< msg.payload.length; i++) { 
    msgs.push({payload: msg.payload[i]}); 
} 

return [msgs] 

這將陣列中在流中的每個項的下一個節點流程

編輯:需要將數組包裝在另一組[]中以將所有消息從同一輸出中取出。

+0

您甚至可以嘗試'msg.payload.map(函數(item){return {payload:item}})' – Rajesh

+0

不確定這是否可以在Node-RED函數節點的沙箱上下文中工作,但您可以給它試一試 – hardillb

+0

我不確定Node。我的意見是基於JS – Rajesh

相關問題