javascript 无法访问JSON对象中的Array

f0brbegy  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(125)

对于我的生活,我不明白为什么这不起作用。
我正在使用WS v8+打开WebSocket连接
我收到一条消息并将其解析为JSON。

ws.on('message', function message(data) {
  var message = data.toString()
  console.log(message)
});

现在输出如预期的那样:

{"method": "state.update", "params": [{"BTCUSDT": {"last": "27427.41"}}], "id": null}

我可以按预期读取message.method和message.params。问题是访问“params”中的数组:

ws.on('message', function message(data) {
  var message = data.toString()
  console.log(data.params[0]) // FAILS
});

ws.on('message', function message(data) {
  var message = data.toString()
  console.log(data.params)
  // OUTPUT: [{"BTCUSDT": {"last": "27427.41"}}]
});

对于我的生活,我不能弄清楚为什么它不能看到参数作为一个数组与任何长度为这个非常简单的任务。
更新:
对于WS库,需要从Buffer中使用toString()。在WS 7中,这是不需要的。
另外,params字段没有显示为数组,这解释了为什么长度和其他索引不起作用,但非常困惑,为什么它没有被读取为数组,输出我看到的。

ws.on('message', function message(data) {
    var message = data.toString()
    var output = JSON.parse(message)
    console.log( Array.isArray(output.params) )    // RETURNS FALSE   
 });
zrfyljdw

zrfyljdw1#

假设您使用的是this ws library,您似乎假设数据是JSON格式的,但我找不到任何文档来支持这种假设。
尝试在迭代对象之前调用JSON.parse(data)

ws.on('message', function message(data) {
  var json = JSON.parse(data) // <----- HERE
  console.log(json.params[0])
});

相关问题