您的位置 首页 > 数码极客

〔如何获取json数组的长度〕获取json对象中的数组

1,解析对象

接下来,我们来个复杂一点的,解析一个对象,要解析的目标如下:

{ "student": { "name":"maye", "age":18, "email":"zcmaye@gmail.com", "isMarried":false } }

看起来比一个键值对复杂多了,我们又需要学习新的接口函数了吗?为了更严谨,我们对key的类型进行判断即可,其他的一样。

void parserObject(const char* json) { //1,将json数据解析成为cjson对象 cJSON*root = cJSON_Parse(json); //2,调用cJSON_GetObjectItem()函数,获取到对象student cJSON* objItem = cJSON_GetObjectItem(root,"student"); if (cJSON_IsObject(objItem)) //如果查找到的确实是个对象,不是其他(比如字符串,值...) { //对我们刚取出来的对象student,多次调用cJSON_GetObjectItem()函数,来获取对象的成员。此时要注意,不同的成员,访问的方法不一样: cJSON* item = NULL; item = cJSON_GetObjectItem(objItem, "name"); printf("name:%s\n", cJSON_GetStringValue(item)); item = cJSON_GetObjectItem(objItem, "age"); printf("age:%d\n",(int)cJSON_GetNumberValue(item)); item = cJSON_GetObjectItem(objItem, "email"); printf("name:%s\n", item->valuestring/*cJSON_GetStringValue(item)*/); item = cJSON_GetObjectItem(objItem, "isMarried"); //下面if中两种方法都可判断bool类型的值 if (cJSON_IsTrue(item) || item->type == cJSON_True) { printf("isMarried:%s\n","true"); } else { printf("isMarried:%s\n", "false"); } } cJSON_Delete(root); }


结果:


2,解析数组

最后,我们来个更复杂一些的,来解析一个数组,数组的成员是对象!要解析的JSON串如下:

{ "students": [ { "name":"maye", "age" : 18, "email" : "zcmaye@gmail.com", "isMarried" : false }, { "name":"顽石", "age" : 20, "email" : "xxxx@gmail.com", "isMarried" : false }, { "name":"jack", "age" : 26, "email" : "jack@qq.com", "isMarried" : true } ] }

此时,我们又需要学习新的接口了,一个是获取数组长度,一个是取数组成员,函数原型如下:

int cJSON_GetArraySize(cJSON *array); cJSON*cJSON_GetArrayItem(cJSON *array,int item);//解析student对象 void parserStudent(cJSON* item) { if (!cJSON_IsObject(item)) return; cJSON* subitem = NULL; subitem = cJSON_GetObjectItem(item, "name"); printf("name:%s\n", cJSON_GetStringValue(subitem)); subitem = cJSON_GetObjectItem(item, "age"); printf("age:%d\n", (int)cJSON_GetNumberValue(subitem)); subitem = cJSON_GetObjectItem(item, "email"); printf("name:%s\n", subitem->valuestring/*cJSON_GetStringValue(subitem)*/); subitem = cJSON_GetObjectItem(item, "isMarried"); //下面if中两种方法都可判断bool类型的值 if (cJSON_IsTrue(subitem) || subitem->type == cJSON_True) { printf("isMarried:%s\n", "true"); } else { printf("isMarried:%s\n", "false"); } } //解析数组 void parserArray(const char* json) { cJSON* root = cJSON_Parse(json); cJSON* arrayitem = cJSON_GetObjectItem(root, "students"); if (cJSON_IsArray(arrayitem)) { //获取数组大小 int len = cJSON_GetArraySize(arrayitem); //遍历数组的每个元素 for (int i = 0; i < len; i++) { cJSON* item = cJSON_GetArrayItem(arrayitem, i); //解析数组的每个元素 printf("\n%d student obj\n",i); parserStudent(item); } } cJSON_Delete(root); }

结果:


cJSON解析对象和数组的内容就到这啦~接下来会为大家带来更多cJSON库使用技巧,喜欢的不如点个“在看”吧

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何获取json数组的长度,获取json对象中的数组,js获取json数组长度,如何获取json中的数组,怎么获取json数组里面的值”边界阅读