【发布时间】:2018-04-09 19:48:43
【问题描述】:
我的 JavaScript MQTT 客户端 (Paho) 订阅了 MQTT 代理 (Mosquitto) 上的主题。 我使用 JSON.parse 将数组转换为对象。
client.onMessageArrived = onMessageArrived;
var myObj = JSON.parse(message.payloadString);
payload 看起来像这样,
{"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 我得到,
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 以及 ??? 中包含的信息(名称:值)即命名对象(注意:此条目跟在带有名称 data 的条目之后),我也想从中获取单个 name:values 以及它们的 name:values。
总之,我想从我认为是来自 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
啊啊啊啊! 我必须承认我对 JavaScript 不是很了解,但我认为这不会很难,结果变得很混乱。
【问题讨论】:
-
typeof <array>返回"object",因为数组只是一个具有一些特殊属性的对象。 -
Object.entries 返回一个数组,因此为什么你会得到一个数组.... typeof 顺便说一下并没有给出
"array"类型的字符串。数组只是专门的对象,因此它给出了"object"
标签: javascript arrays object