cJSON的简单应用(json对象、数组)

cJSON 结构:

typedef struct cJSON {

         structcJSON *next,*prev;       /* next/prevallow you to walk array/object chains. Alternatively, useGetArraySize/GetArrayItem/GetObjectItem */

         structcJSON *child;                   /* Anarray or object item will have a child pointer pointing to a chain of the itemsin the array/object. */

 

         inttype;                                        /*The type of the item, as above. */

 

         char*valuestring;                      /* Theitem's string, if type==cJSON_String */

         intvalueint;                                  /*The item's number, if type==cJSON_Number */

         doublevaluedouble;                            /*The item's number, if type==cJSON_Number */

 

         char*string;                                /*The item's name string, if this item is the child of, or is in the list ofsubitems of an object. */

} cJSON;

Object 、item、 array 都是一个cJSON对象

Json读入:

1.      建立json根对象将json字符串解析到跟对象

2.      从跟对象中获取item  item可能是 item、object、array

1、   Item: 直接通过item->valueString或item->valueIntitem->valueFloat获得字符串的值、或者整形值浮点型

2、   object:从根对象中获得的item为object ,那么接着从当前object中获得item

3、   array:从跟对象中获得的item为array,那么需要你得到数组长度 然后从数组中获得相应的对象 继续处理

3.      释放json空间

cJSON*root_input=cJSON_Parse(charjson);  //将字符串形式的json数据解析给cJSON对象

cJSON*item=cJSON_GetObjectItem(cmdroot_input,"cmd");//向json对象中读取item  item可以是一个简单item  也可以是一个json对象  读入json对象或数组用 cJSON*objectson=cmdroot->child 若是json对象就做如上处理

         若是数组

         intarraylen=cJSON_GetArraySize(objectson);

         cJSONtemobj=cJSON_getArrayItem(objectson,i);//i<arraylen 获得json对象后就按照对象处理

 

         memcpy(cmd_input.cmd,item->valuestring,strlen(item->valuestring)+1);

         item=cJSON_GetObjectItem(cmdroot_input,"num");

         cmd_input.num=item->valueint;

         cJSON_Delete(cmdroot_input);

 

Json写入:

1.      创建json root对象分配空间

2.      向root对象中添加 item item可以是item 、object 、array

1、item:用cJSON_CreateString() cJSON_CreateNumber()创建的item

2、object:先创建json对象分配空间 可以向当前对象中添加item

3、array:先创建array 分配空间 然后向当前的array添加object

         3.生成json root对象 的json字符串

         4释放json root空间

Code:

int main(int argc,char **argv)

{       

//******write json**********************

         cJSON*root=cJSON_CreateObject();

         cJSON*obj=cJSON_CreateObject();

         cJSON*array=cJSON_CreateArray();

         inti;

         //**********************itemteststring:stringtest

         cJSON_AddItemToObject(root,"teststring",cJSON_CreateString("stringtest"));

         cJSON_AddItemToObject(root,"testnum",cJSON_CreateNumber(15));

         //**********************object

         cJSON_AddItemToObject(root,"testobject",obj);

         cJSON_AddItemToObject(obj,"testobjstring",cJSON_CreateString("objstring"));

         //**********************array

         cJSON_AddItemToObject(root,"testarray",array);

         for(i=0;i<5;i++){

                   cJSON*arrayobj=cJSON_CreateObject();

                   cJSON_AddItemToArray(array,arrayobj);

                   cJSON_AddItemToObject(arrayobj,"arrayobjnum",cJSON_CreateNumber(i));

         }

         char*temjson=cJSON_Print(root);

         printf("%s\n",temjson);

         charjson[255];

         strncpy(json,temjson,strlen(temjson)+1);

         cJSON_Delete(root);//deletethe root

//*******readjson********************************

         cJSON*rootread=cJSON_Parse(json),*objread,*arrayread;

         //***************readitem

         cJSON*itemread=cJSON_GetObjectItem(rootread,"teststring");

         printf("teststring:%s\n",itemread->valuestring);

         itemread=cJSON_GetObjectItem(rootread,"testnum");

         printf("testnum:%d\n",itemread->valueint);

         //***************readobject

         objread=cJSON_GetObjectItem(rootread,"testobject");

         itemread=cJSON_GetObjectItem(objread,"testobjstring");

         printf("testobjstring:  %s\n",itemread->valuestring);

         //***************readarray

         arrayread=cJSON_GetObjectItem(rootread,"testarray");

         intarraysize=cJSON_GetArraySize(arrayread);

         for(i=0;i<arraysize;i++){

                   objread=cJSON_GetArrayItem(arrayread,i);

                   itemread=cJSON_GetObjectItem(objread,"arrayobjnum");

                   printf("arrayobjnum:  %f\n",itemread->valuedouble );

         }

         cJSON_Delete(rootread);

        

 

         return0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值