JavaScript对象,数组,混乱?

时间:2018-04-09 19:48:44

标签: javascript arrays object

我的JavaScript MQTT客户端(Paho)订阅了MQTT Broker(Mosquitto)上的主题。 我使用JSON.parse将数组转换为对象。

client.onMessageArrived = onMessageArrived;
var myObj = JSON.parse(message.payloadString);

有效载荷如下所示,

{"applicationID":"4","applicationName":"Sensor-Module-241","deviceName":"P-241","devEUI":"00face0173800241","rxInfo":[{"mac":"0004a30b0022813c","rssi":-22,"loRaSNR":10.2,"name":"PiXCL-G000","latitude":45.485524299999994,"longitude":-75.6969496,"altitude":54}],"txInfo":{"frequency":903000000,"dataRate":{"modulation":"LORA","bandwidth":500,"spreadFactor":8},"adr":true,"codeRate":"4/5"},"fCnt":10101,"fPort":99,"data":"AGhQAXMq+AJnAHgDAAEEAAEFAQEGAQEHAgEYCAIB0A==","object":{"digitalInput":{"3":1,"4":1},"digitalOutput":{"5":1,"6":1},"analogInput":{"7":2.8,"8":4.64},"temperatureSensor":{"2":12},"humiditySensor":{"0":40},"barometer":{"1":1100}}}

使用typeof I get,

 console.log('payLoadString: ', typeof 'payLoadString');//string
    console.log('message.payloadString: ', typeof message.payloadString);//string
    console.log('myObj: ', typeof myObj);//object
    console.log('myObj.applicationID: ', typeof myObj.applicationID);//string
    console.log('myObj.applicationName: ', typeof myObj.applicationName);//string
    console.log('myObj.deviceName: ', typeof myObj.deviceName);//string
    console.log('myObj.devEUI: ', typeof myObj.devEUI);//string
    console.log('myObj.rxInfo: ', typeof myObj.rxInfo);//object
    console.log('myObj.txInfo: ', typeof myObj.txInfo);//object
    console.log('myObj.fCnt: ', typeof myObj.fCnt);//number
    console.log('myObj.fPort: ', typeof myObj.fPort);//number
    console.log('myObj.data: ', typeof myObj.data);//string
    console.log('myObj.object: ', typeof myObj.object);//object

如果我执行以下操作,

  • 我的第一个console.log给了我一个数组???
  • 我将该数组分配给变量
  • 我的第二个console.log给了我一个数组???
  • 我的第三个console.log给了我一个对象???

我得到的东西我不明白,

console.log('Object.entries(myObj): ', Object.entries(myObj));
   var n = Object.entries(myObj);
   console.log('typeof: n: ', n);
   console.log('typeof: Object.entries(myObj): ', typeof Object.entries(myObj));
Object.entries(myObj):  
Array [ […], […], […], […], […], […], […], […], […], […] ]
utility.js:114:2
typeof: n:  
Array [ […], […], […], […], […], […], […], […], […], […] ]
utility.js:116:2
typeof: Object.entries(myObj):  object

我一开始以为我曾使用JSON.parse来制作对象,但现在我不知道它是什么。 然后,我想获取rxInfo中包含的信息(名称:值)以及???这是一个名为object的对象(注意:这个条目跟在一个名为data的文件后面),我想得到个人名字:这个名字以及它们的名字:值。

总之,我想得到名称:我认为是来自mqtt代理的json消息的值对,这样我就可以使用表中列中的名称和相邻列中的相应值浏览器中的表格。

我一直在努力但最终会遇到各种看起来很奇怪的事情。 例如,这个Object.entries(myObj.rxInfo [0])给了我

Array [ […], […], […], […], […], […], […] ]

我可以获取长度,并在此使用Object.entries(),Object.keys()和Object.values(),但是当我尝试使用字符串键访问特定条目时, console.log(Object.entries(myObj.rxInfo[0].rssi)),我最终

Array []

当我这样做时,

console.log(Object.entries(myObj.rxInfo[0]).rssi);

我最终得到了

undefined

ARRGGGHHHH! 我必须承认我对JavaScript不是很了解,但是我认为这不会很难,而且结果很混乱。

1 个答案:

答案 0 :(得分:1)

在数组上调用typeof将返回导致混淆的对象,在您提供的示例rxInfo中是一个数组。您可以尝试myObj.rxInfo[0].rssi,您应该会看到预期的价值。

您可以使用isArray或测试原型来检查对象是否是实际数组 Object.prototype.toString.call(data) == '[object Array]';