当前位置:网站首页 > 技术博客 > 正文

c解析json字符串



 

说明:

1、cJSON是使用链表来存储数据的,其访问方式很像一颗树。每一个节点可以有兄弟节点,通过next/prev指针来查找,它类似双向链表;每个节点也可以有孩子节点,通过child指针来访问,进入下一层。只有节点是对象或数组时才可以有孩子节点。

2、type是键(key)的类型,一共有7种取值,分别是:False,Ture,NULL,Number,String,Array(数组),Object(对象或单键名)。

若是Number类型,则valueint或valuedouble中存储着值。若期望的是int,则访问valueint,若期望的是double,则访问valuedouble,可以得到值。若是String类型的,则valuestring中存储着值,可以访问valuestring得到值。

3、string中存放的是这个节点的名字,可理解为key的名称。

 

第一层结构体;第二层键值对

步骤:Parse格式化==》cJSON_GetObjectItem根据键名获取键值

 

 

第一层数组;第二层结构体;第三层键值对;

步骤:Parse格式化==》IsArray判断是否数组==》GetArraySize获取数组元素个数==》cJSON_GetArrayItem按照下标检索数组元素==》cJSON_GetObjectItem根据元素中的单键名获取键值

 

与5的区别在于,第一层是键值对(值:是结构体数组)

 

(1)调用cJSON_Parse()函数,解析JSON数据包。

(2)调用一次cJSON_GetObjectItem()函数,获取到数组people。【重点区别!!】

(3)对刚取出来的数组people,调用cJSON_GetArraySize()函数,来获取数组中对象的个数。然后,多次调用cJSON_GetArrayItem()函数,逐个读取数组中对象的内容。

(4)通过cJSON_Delete(),释放cJSON_Parse()分配出来的内存空间。

例程如下:例程较长,见文章末尾。

 

而当待解析数据同时包含了“结构体数组”时:

第一步,先利用cJSON_GetArraySize获取数组元素个数;

第二步,使用cJSON_GetArrayItem(数组名,元素下标)方式来检索数组中对应的元素;

第三步,判断该元素是否包含了直接的对象,即该元素的类型是否是cJSON_Object;

第四步,使用cJSON_GetObjectItem(元素名,单键名)的方式获取单键名所对应的键值;

 

 以上格式可以使用如下解析方法:

【重点:利用数组或对象的后向链表指针】

 

 方法类似结构体数组

解析方法如下:第一步获取键名,第二步获取数组个数,第三步按照元素下标获取元素对象!

 

 

  • 上一篇: css中设置溢出隐藏
  • 下一篇: uboot bootz
  • 版权声明


    相关文章:

  • css中设置溢出隐藏2024-11-12 08:01:01
  • 使用ssh实现远程登录linux2024-11-12 08:01:01
  • 预测模型的构建及应用2024-11-12 08:01:01
  • sigfpe信号2024-11-12 08:01:01
  • 测试cpu的性能指标2024-11-12 08:01:01
  • uboot bootz2024-11-12 08:01:01
  • 文件上传前端怎么写2024-11-12 08:01:01
  • android线程间的通讯2024-11-12 08:01:01
  • xml文件中注释怎么写2024-11-12 08:01:01
  • 小程序添加测试人员2024-11-12 08:01:01