Javascript 从字典中提取值(节点红色)

Javascript 从字典中提取值(节点红色),javascript,node-red,Javascript,Node Red,我正在发出一个简单的HTTP GET请求 以及响应,假设函数只包含返回消息,是一个字典,例如: { "data": [{ "time": "2020-10-01", "value": 998.37 }], "id": "27", "tags": [] } 现在我只想提取值本身。我该怎么做?

我正在发出一个简单的HTTP GET请求

以及响应,假设
函数
只包含
返回消息,是一个字典,例如:

{
    "data": [{
        "time": "2020-10-01",
        "value": 998.37
    }],
    "id": "27",
    "tags": []
}
现在我只想提取值本身。我该怎么做? 如果我尝试
返回msg['data']['value']我得到一个TypeError
TypeError:无法读取未定义的属性“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,但是,我认为我的问题主要在于节点红色流文件格式。我编辑了我原来的帖子。