Javascript 从字典中提取值(节点红色)
我正在发出一个简单的HTTP GET请求 以及响应,假设Javascript 从字典中提取值(节点红色),javascript,node-red,Javascript,Node Red,我正在发出一个简单的HTTP GET请求 以及响应,假设函数只包含返回消息,是一个字典,例如: { "data": [{ "time": "2020-10-01", "value": 998.37 }], "id": "27", "tags": [] } 现在我只想提取值本身。我该怎么做?
函数
只包含返回消息代码>,是一个字典,例如:
{
"data": [{
"time": "2020-10-01",
"value": 998.37
}],
"id": "27",
"tags": []
}
现在我只想提取值本身。我该怎么做?
如果我尝试返回msg['data']['value']代码>我得到一个TypeErrorTypeError:无法读取未定义的属性“value”
编辑:我尝试了Pogrindis方法,但我正在努力处理节点的红色流文件
我的节点红色界面的JSON非常简单,函数是一个单行程序
return(msg.payload)['data'][0]['value']代码>:
[{
"id": "cda42b56.ad2258",
"type": "tab",
"label": "Test",
"disabled": false,
"info": ""
}, {
"id": "95fa7937.aa8e48",
"type": "debug",
"z": "cda42b56.ad2258",
"name": "Logger",
"active": true,
"tosidebar": true,
"console": true,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 480,
"y": 80,
"wires": []
}, {
"id": "200acc6f.e2ff54",
"type": "function",
"z": "cda42b56.ad2258",
"name": "",
"func": "return (msg.payload)['data'][0]['value'];\n",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"x": 300,
"y": 80,
"wires": [
["95fa7937.aa8e48"]
]
}, {
"id": "831bfe43.3d956",
"type": "inject",
"z": "cda42b56.ad2258",
"name": "",
"props": [{
"p": "payload"
}],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "{\"data\":[{\"time\":\"2020\",\"value\":997.62}],\"id\":\"xy123\"}",
"payloadType": "str",
"x": 120,
"y": 80,
"wires": [
["200acc6f.e2ff54"]
]
}]
数据
是一个数组,值不是所述数组的索引
我想你可以用索引来检索数据
const testData = {
"data": [{
"time": "2020-10-01",
"value": 998.37
}],
"id": "27",
"tags": []
};
console.log(testData['data'][0]['value']);
我说我猜,因为有N个数据,您最好使用某种迭代器/过滤器等,但我不知道您的用例。需要记住的重要一点是,函数节点必须始终返回msg
对象,而不是单个值
错误来自调试节点(如果将鼠标悬停在侧栏中的错误上,它将显示错误来自哪个节点),因为您返回的是原始值,而不是msg
对象
您的函数只返回一个数字,这将不起作用
该函数应为:
msg.payload = msg.payload.data.[0].value;
return msg;
关于编写函数节点的文档可以找到您给出的流程显示您正在inject节点中发送文本,而不是JSON对象
return {"value" : msg.payload.data[0].value}
这应该更改为JSON选项。或者,您可以在功能节点中使用该方法
节点红色节点通过JSON对象进行通信,因此函数的输出也需要是JSON对象
return {"value" : msg.payload.data[0].value}
或者,如果数据列表的长度是动态的,则可以使用
return {"values" : msg.payload.data.map(object => object.value)}
谢谢你的评论。您给出的解决方案使用javascript,但是,我认为我的问题主要在于节点红色流文件格式。我编辑了我原来的帖子。