gpt4 book ai didi

javascript - 从 JSON 缓冲区中提取的数组类型元素未显示数组的常用属性(在 NodeJS 中)

转载 作者:行者123 更新时间:2023-11-29 23:26:38 26 4
gpt4 key购买 nike

我在 UDP 端口 (2222) 上发送一条 JSON 样式的消息,该消息被在 NodeJS 中监听此端口的 UDP 服务器捕获。当触发新消息的事件时,数据(Buffer 类型)被转换为 JSON,其中有一个嵌套数组的数组。变量 deviceData 只是一个大对象,其中我有 150 个元素的数组,我在管道中推送/移动我的新数据(时间戳 + 从嵌套数组中提取的每个值)。

源数据从缓冲区转换后的典型格式如下:

{"ts" : 1234567890,
"ms" : 500,
"values": [[0,0],
[0,0],
[0,0,0],
[0,0,0],
[0,0,0],
[0,0,0],
[0],
[0],
[0,0],
[0,0]
]}

代码是这样的:

let deviceData = {}
UDPserver.bind(2222)

UDPserver.on('error', (err => {
console.log('server error:\n${err.stack}')
server.close()
}

UDPserver.on('message', (data) => {

let JSONdata = JSON.parse(data.toString())
console.log(JSONdata)
let newTs = JSONdata.ts*1000 + JSONdata.ms
deviceData['ts'].push(newTs)
deviceData['ts'].shift()
console.log(JSONdata.values) //OK it displays the array of nested arrays in JSON type format
console.log(JSONdata['values']) //OK, it displays too
console.log(JSONdata.values[0]) //it fails, stating cannot read property of undefined
//console.log(JSONdata['values'][0]) //it fails with the same error
console.log(Object.prototype.toString.call(JSONdata.values)) //it returns [ Object Array ]

}

当我尝试以任何方式访问我的嵌套数组时,我都没有成功。我尝试了 .map()、.forEach() 和其他迭代器,但事实证明每次它都失败并显示相同的错误消息:即使它声明一种数组类型,该属性也不存在未定义。

有没有人有想法?

注意:源消息是使用 ArduinoJSON 库使用 Arduino 设备构建的,但它应该与问题无关......


编辑:我将嵌套数组直接链接到一对键值(数组样式)以在我的对象中保留一层嵌套数组。我仍然无法访问每个数组的值。例如,由于 JSONdata['dev_1'],我选择了第二个元素。在 console.log 中它显示正确,console.log(Object.prototype.toString.call(JSONdata['dev_1']) 仍然返回 [ Object Array ] 但是当访问第一个值 JSONdata['dev_1'][0] 失败并显示错误消息 cannot ... of undefined or null object。

最佳答案

也许你可以这样尝试:

var yourDatas = JSON.parse(data.toString());
console.log(yourDatas.values[0] ? yourDatas.values[0] : "values does not exist...");

关于javascript - 从 JSON 缓冲区中提取的数组类型元素未显示数组的常用属性(在 NodeJS 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com