如何将包含在一条消息中的 JSON 对象数组转换为多个 JSON 对象消息?
How can I transform a JSON array of object contained in one message to multiple JSON object messages?
目前正在 Node-RED 中创建一个 ETL 流 运行,运行 在 Node.js 上,运行 在 Bluemix 上 运行 在 CloudFoundry 上。
我正在查询一个 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"]
]
}]
将 Cloudant 节点 输出到 函数节点,如下所示:
var msgs = [];
for (var i = 0; i< msg.payload.length; i++) {
msgs.push({payload: msg.payload[i]});
}
return [msgs]
这会将数组中的每个项目流式传输到流中的下一个节点
编辑:需要将数组包装在另一组 [] 中,以使所有消息输出相同的输出。
目前正在 Node-RED 中创建一个 ETL 流 运行,运行 在 Node.js 上,运行 在 Bluemix 上 运行 在 CloudFoundry 上。
我正在查询一个 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"]
]
}]
将 Cloudant 节点 输出到 函数节点,如下所示:
var msgs = [];
for (var i = 0; i< msg.payload.length; i++) {
msgs.push({payload: msg.payload[i]});
}
return [msgs]
这会将数组中的每个项目流式传输到流中的下一个节点
编辑:需要将数组包装在另一组 [] 中,以使所有消息输出相同的输出。