说明:
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(元素名,单键名)的方式获取单键名所对应的键值;
以上格式可以使用如下解析方法:
【重点:利用数组或对象的后向链表指针】
方法类似结构体数组
解析方法如下:第一步获取键名,第二步获取数组个数,第三步按照元素下标获取元素对象!
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/2185.html