在物联网IOT设计和开发中,我们通常会遇到一些数据交互和传输问题,我们需要在不同的设备间传递数据进行交互通信,通常我们需要选择一个合适的数据交互协议和格式,这样我们的设计才会得到极大的简化,和提高设计质量,JSON是一种是一种轻量级的数据交换格式,近年来不仅被广泛的使用在互联网邻域,同时在IOT领域也得到了广泛的应用,利用JSON来进行数据交互成为了众多IOT设计方案的优选,本节blog将在我们当前非常流行的IOT开发套件draongboard 410c上来实现JSON报文的解析和应用。
这里我们使用的是Python脚本在dragonboard 410c上实现对JSON报文的解析,这里python提供了JSON库模块来处理JSON报文,这里我们只需要在dragonboard 410c上使用apt-get工具安装JSON的python模块即可,具体的安装命令如下:
apt-get install json-py
安装好后,再使用import json 导入即可使用该模块了,利用该模块来进行JSON解析非常方便,下面我们就来看如何使用JSON模块来快捷的实现对JSON报文的解析:
这里我们给出一个常用的系统用户注册报文示例,如下:
‘{
“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”
}
}
}’
在这个报文中,报文的收发者ID、时间戳、消息类型、用户名、用户的密码MD5值、用户性别等信息等,发送该报文可以向dragonbaord 410c设备申请注册,这里就以该注册报文为例来教大家如何快速的编写python脚本来实现对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)
运行上述代码我们就可以看到,我们可以获取报文中对应字段标签的内容进行打印,表示对JSON报文解析成功。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)