知识总结

  • JSON:语法是JavaScript对象表示法语法的子集。数据在键值对中,数据由逗号分隔,花括号保存对象,方括号保存数组,每个数组成员用逗号隔开
三种形式
 - "name":"lai"
 - {"name":"lai","gender":"M"}
 - JSON数组在方括号中书写:数组成员也可以是对象、值,或者是数组
 - {"hobby":["tennis","football"]}
  • cJSON.c 和 cJSON.h 在该文件的代码中出现了众多关于JSON的函数,这里我们特意从cJSON库(github)中找到了其源码,照着源码对代码进行解析
  • 可以看到cJSON的结构体如下:
    在这里插入图片描述
    可以看到cJSON实际上也是一个双向链表(与鸿蒙中最常用的数据结构一致!双向链表也太好用了)源代码中的注释非常详细,这里就不过多解读,主要讲解一下几个常用的函数:
  • cJSON_CreateObject(void):创建cJSON对象并返回对象指针
  • cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string):将string类型的变量添加入对象
  • cJSON_Delete(cJSON *item):将一个cJSON结构体删除(递归调用)
  • cJSON_GetObjectItem(const cJSON * const object, const char * const string):获取一个cJSON对象的所有属性

综合概述

文件的代码比较容易读懂,就是msg(cJSON)格式的数据与原先几个自定义的结构体比如(DeviceInfo Authconn Conninfo)的数据相互转换,私以为在传输时需要类JSON的信息传输体更方便通信,所以有了该文件的代码。具体cJSON的具体实现JSON格式的原理可以参考cJSON.c和cJSON.h,里面的注释非常详细。

代码详解

msg_get_deviceid.h

头文件的新信息不多,同样是引用include目录下的其他头文件,以及上面提到的头文件"cJSON.h"
同样声明了五个函数供其他.c文件使用
在这里插入图片描述

msg_get_deviceid.c

  1. 将deviceid存储入cJSON链表的函数,通过调用cJSON.c中的函数来完成
    在这里插入图片描述
  2. 从cJSON中解析deviceid的函数
    在这里插入图片描述
  3. int MsgGetDeviceIdUnPack(const cJSON *msg, AuthConn *conn)
    首先检查了参数是否为空,再对解析函数返回的值进行判断,判断是否解析成功
    在这里插入图片描述
  4. cJSON *MsgGetDeviceIdPack(const DeviceInfo *devInfo)
    在这里插入图片描述
  5. 信息存入cJSON结构体双向链表中的函数
    在这里插入图片描述
    在这里插入图片描述
  6. 将数据从msg解析出来存入ConnInfo和AuthConn中
    在这里插入图片描述
  7. 同样是一个从DeviceInfo中获取deviceid存入msg(cJSON)的函数但是这里给出了CODE应该时需要根据CODE的不同后面从msg中取数据后执行的操作不同
    在这里插入图片描述

多谢阅读和点赞!

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐