在draongboard 410c上使用JSON进行通信交互——JSON报文解析

      在物联网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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值