Javascript 从JSON缓冲区提取的数组类型元素,不显示数组的常规属性(在NodeJS中)

Javascript 从JSON缓冲区提取的数组类型元素,不显示数组的常规属性(在NodeJS中),javascript,arrays,node.js,buffer,Javascript,Arrays,Node.js,Buffer,我在一个UDP端口(2222)上发送一条JSON风格的消息,该消息被在NodeJS中侦听该端口的UDP服务器捕获。当触发新消息的事件时,数据(缓冲区类型)将转换为JSON,其中有一个嵌套数组的数组。 变量deviceData只是一个大对象,其中我有150个元素的数组,在其中我像在管道中一样推/移我的新数据(时间戳+从嵌套数组中提取的每个值) 从缓冲区转换后,源数据的典型格式如下: {"ts" : 1234567890, "ms" : 500, "values": [[0,0], [0,0], [

我在一个UDP端口(2222)上发送一条JSON风格的消息,该消息被在NodeJS中侦听该端口的UDP服务器捕获。当触发新消息的事件时,数据(缓冲区类型)将转换为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]
时,它会失败,错误消息是无法…未定义或空对象。

也许您可以这样尝试:

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

最后一个
[0,0]后面不应该有
在values属性中,可能您的JSON被解析为无效?如果值
未定义,则时间戳处理可能不会引发错误,因此您可能看不到它。对不起,我编辑了这个问题。不,ArduinoJSON库非常尊重JSON标准。我的嵌套数组中始终有数据。它用0填充如果我没有数据。当我记录我的JSONdata.values数组时,它会按预期显示(一个嵌套数组的数组),但当我尝试使用一些属性,如.map()函数时,它会失败。我尝试将我的数组JSONdata.values放入一个通过
let JSONvalues=new array()
声明的全新数组中,但也没有成功。