基于Dragonbaord 410c開發(fā)板實現(xiàn)JSON通信報文解析
在物聯(lián)網(wǎng)IOT設(shè)計和開發(fā)中,我們通常會遇到一些數(shù)據(jù)交互和傳輸問題,我們需要在不同的設(shè)備間傳遞數(shù)據(jù)進行交互通信,通常我們需要選擇一個合適的數(shù)據(jù)交互協(xié)議和格式,這樣我們的設(shè)計才會得到極大的簡化,和提高設(shè)計質(zhì)量,JSON是一種是一種輕量級的數(shù)據(jù)交換格式,近年來不僅被廣泛的使用在互聯(lián)網(wǎng)鄰域,同時在IOT領(lǐng)域也得到了廣泛的應(yīng)用,利用JSON來進行數(shù)據(jù)交互成為了眾多IOT設(shè)計方案的優(yōu)選,本節(jié)blog將在我們當(dāng)前非常流行的IOT開發(fā)套件draongboard 410c上來實現(xiàn)JSON報文的解析和應(yīng)用。
本文引用地址:http://butianyuan.cn/article/201710/365544.htm這里我們使用的是Python腳本在dragonboard 410c上實現(xiàn)對JSON報文的解析,這里python提供了JSON庫模塊來處理JSON報文,這里我們只需要在dragonboard 410c上使用apt-get工具安裝JSON的python模塊即可,具體的安裝命令如下:
apt-get install json-py
安裝好后,再使用import json 導(dǎo)入即可使用該模塊了,利用該模塊來進行JSON解析非常方便,下面我們就來看如何使用JSON模塊來快捷的實現(xiàn)對JSON報文的解析:
這里我們給出一個常用的系統(tǒng)用戶注冊報文示例,如下:
‘{
“report”:{
“from”:“MBD000000001”,
“to”:“MBS000000001”,
“TImeStamp”:“2017-1-14 12:45:32”,
“msg”:{
“type”:0,
“userName”:“test1”,
“userMD5”:“abdsetsasgt”,
“sexuality”:“男”,
“age”:“19”,
“phone”:“15361822674”,
“email”:“331212931@qq.com”
}
}
}’
在這個報文中,報文的收發(fā)者ID、時間戳、消息類型、用戶名、用戶的密碼MD5值、用戶性別等信息等,發(fā)送該報文可以向dragonbaord 410c設(shè)備申請注冊,這里就以該注冊報文為例來教大家如何快速的編寫python腳本來實現(xiàn)對JSON報文的解析。
具體的python代碼如下:
#coding:utf8
import sys
import json
class MssageProcessing:
def __init__(self,recvMsg):
self.reporTIsError=0
self.reporTID=“”
self.toID=“”
try:
self.reportJosn=json.loads(recvMsg)[“report”]
self.msgJosn=self.reportJosn[“msg”]
self.fromID=self.getFromID()
if self.fromID!=“error”:
self.reporTIsError=0
else:
self.reportIsError=1
self.toID=self.getToID()
if self.toID!=“error”:
self.reportIsError=0
else:
self.reportIsError=1
except:
print(“recv report is error”)
self.reportIsError=1
def updateMsg(self,recvMsg):
self.reportJosn=json.loads(recvMsg)[“report”]
self.msgJosn=self.reportJosn[“msg”]
self.fromID=self.getFromID()
self.toID=self.getToID()
self.mobaiServiceID=“MBS000000001”
def getFromID(self):
fID=self.reportJosn[“from”]
print(fID)
if len(fID)!=12:
return “error”
else:
if fID[0:3]==“MBS” or fID[0:3]==“MBU” or fID[0:3]==“MBD”:
try:
int(fID[3:])
return fID
except:
return “error”
else:
return “error”
def getToID(self):
print(self.reportJosn[“to”])
return self.reportJosn[“to”]
def getTimeStamp(self):
print(self.reportJosn[“timeStamp”])
return self.reportJosn[“timeStamp”]
def getMsgType(self):
print(self.msgJosn[“type”])
return self.msgJosn[“type”]
if __name__==“__main__”:
recvMsg=MssageProcessing(‘{“report”:{“from”:“000000000001”,“to”:“000000000002”,“timeStamp”:“2017-1-14 12:45:32”,“msg”:{“type”:0,“userName”:“test1”,“userMD5”:“abdsetsasgt”,“sexuality”:“男”,“age”:“19”}}}’)
recvMsg.getFromID()
recvMsg.getToID()
recvMsg.getMsgType()
[userName,userMD5,sexuality,age]=recvMsg.registerMessageHandle()
print(userName)
print(userMD5)
運行上述代碼我們就可以看到,我們可以獲取報文中對應(yīng)字段標(biāo)簽的內(nèi)容進行打印,表示對JSON報文解析成功。
評論