从 JSON 缓冲区中提取的数组类型元素未显示数组的通常属性(在 NodeJS 中)
Array type element extracted from a JSON buffer not showing the usual properties of arrays (in NodeJS)
我在 UDP 端口 (2222) 上发送一条 JSON 风格的消息,该消息被在 NodeJS 中侦听此端口的 UDP 服务器捕获。当触发新消息事件时,数据(Buffer 类型)将变成 JSON,其中有一个嵌套数组。
变量 deviceData 只是一个大对象,其中我有 150 个元素的数组,其中我 push/shift 作为管道中的新数据,(时间戳 + 从嵌套数组中提取的每个值)。
源数据从缓冲区转换后的典型格式如下:
{"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'])
仍然 returns [ Object Array ]
但是当访问第一个值 JSONdata['dev_1'][0]
时它失败并显示错误消息 cannot ... of undefined或空对象。
也许你可以这样尝试:
var yourDatas = JSON.parse(data.toString());
console.log(yourDatas.values[0] ? yourDatas.values[0] : "values does not exist...");
我在 UDP 端口 (2222) 上发送一条 JSON 风格的消息,该消息被在 NodeJS 中侦听此端口的 UDP 服务器捕获。当触发新消息事件时,数据(Buffer 类型)将变成 JSON,其中有一个嵌套数组。 变量 deviceData 只是一个大对象,其中我有 150 个元素的数组,其中我 push/shift 作为管道中的新数据,(时间戳 + 从嵌套数组中提取的每个值)。
源数据从缓冲区转换后的典型格式如下:
{"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'])
仍然 returns [ Object Array ]
但是当访问第一个值 JSONdata['dev_1'][0]
时它失败并显示错误消息 cannot ... of undefined或空对象。
也许你可以这样尝试:
var yourDatas = JSON.parse(data.toString());
console.log(yourDatas.values[0] ? yourDatas.values[0] : "values does not exist...");