當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【cJSON】CJSON学习笔记(二)
生活随笔
收集整理的這篇文章主要介紹了
【cJSON】CJSON学习笔记(二)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.重要函數說明
? ? 【1】兩個創建
【創建JSON對象】cJSON *cJSON_CreateObject(void);
【創建JSON數組】cJSON *cJSON_CreateArray(void);
? ? 【2】兩種添加 【向對象中添加】voidcJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
【向數組中添加】void cJSON_AddItemToArray(cJSON *array, cJSON *item);
? ? 【3】常用幾招 【向對象中增加數字】cJSON_AddItemToObject(root, "value", cJSON_CreateNumber(value));
【向對象中增加文件】cJSON_AddItemToObject(root, "string", cJSON_CreateString(string));
? ? 【4】JSON嵌套 【向對象中增加數組】cJSON_AddItemToObject(root, "rows", rows = cJSON_CreateArray());
【向數組中增加對象】cJSON_AddItemToArray(rows, row = cJSON_CreateObject());
2.創建各種各樣的JSON數據包 在這里通過代碼舉幾個例子,更多的內容請查看代碼倉庫中的相關文件。
? ? 【1】JSON數字 [cpp]?view plaincopy void?create_single_number(void)?{?? ????cJSON?*root;?? ????char?*out;?? ????int?value?=?24;?? ?? ????root?=?cJSON_CreateObject();?//?創建根?? ?? ????cJSON_AddItemToObject(root,?"value",?cJSON_CreateNumber(value));?? ?? ????//?打印并釋放?? ????out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? ????//?控制臺輸出?? #if?0?? ????{?? ????????"value":?24?? ????}?? #endif?? }??
? ? 【簡單說明】
【1】cJSON_AddItemToObject(root, "value", cJSON_CreateNumber(value));?
【2】cJSON_AddNumberToObject(root, "value", value);?
【1】和【2】效果完全相同。
? ? 【2】JSON字符串 [cpp]?view plaincopy void?create_single_string(void)?{?? ????cJSON?*root;?? ????char?*out;?? ????char?*name?=?"xukai871105";?? ?? ????root?=?cJSON_CreateObject();?//?創建根?? ????//?方法?使用cJSON_AddItemToObject,推薦使用?? ????cJSON_AddItemToObject(root,?"name",?cJSON_CreateString(name));?? ?? ????//?打印并釋放?? ????out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? ????//?控制臺輸出?? #if?0?? ????{?? ????????"name":?"xukai871105"?? ????}?? #endif?? }??
? ? 【簡單說明】
【1】?cJSON_AddItemToObject(root, "name", cJSON_CreateString(name));
【2】 cJSON_AddStringToObject(root, "name",name);
【1】和【2】效果完全相同。
? ? 【3】JSON布爾類型 [cpp]?view plaincopy void?create_bool(void)?{?? ????cJSON?*root;?? ????char?*out;?? ?? ????root?=?cJSON_CreateObject();?//?創建根?? ?? ????cJSON_AddItemToObject(root,?"success",?cJSON_CreateFalse());?? ?? ????//?打印并釋放?? ????out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? ????//?控制臺輸出?? #if?0?? ????{?? ????????"success":?false?? ????}?? #endif?? }??
? ? 【簡單說明】
【1】布爾類型不需要加引號。
3.JSON格式嵌套 JSON格式在使用時往往存在嵌套,例如JSON對象中嵌套JSON數組而JSON數組中嵌套JSON對象,下面就通過幾個簡單的例子說明問題。
? ? 【1】JSON簡單嵌套 [cpp]?view plaincopy void?create_simple(void)?{?? ????cJSON?*root;?? ????char?*out;?? ????int?list[4]?=?{5,6,7,8};?? ?? ????root?=?cJSON_CreateObject();?//?創建根?? ????cJSON_AddItemToObject(root,?"lists",?cJSON_CreateIntArray(list,?4));?? ?? ????//?打印并釋放?? ????out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? ????//?控制臺輸出?? #if?0?? ????{?? ????????"lists":?[5,?6,?7,?8]?? ????}?? #endif?? }??
? ? 【2】JSON復雜嵌套
[cpp]?view plaincopy void?create_complex(void)?{?? cJSON?*root,?*rows,?*row;?? char?*out;?? int?i?=?0;?? ?? char?*title[3]?=?{?"樹莓派學習筆記——索引博文",?? "樹莓派學習筆記——GPIO功能學習",?? "物聯網學習筆記——索引博文"};?? char?*url[3]?=?{?"http://blog.csdn.net/xukai871105/article/details/23115627",?? "http://blog.csdn.net/xukai871105/article/details/12684617",?? "http://blog.csdn.net/xukai871105/article/details/23366187"};?? ?? root?=?cJSON_CreateObject();?//?創建根?? cJSON_AddNumberToObject(root,?"total",?3);?? ?? //?在object中加入array?? cJSON_AddItemToObject(root,?"rows",?rows?=?cJSON_CreateArray());?? ?? for(i?=?0;?i?<?3;?i++)?{?? //?在array中加入object?? cJSON_AddItemToArray(rows,?row?=?cJSON_CreateObject());?? cJSON_AddItemToObject(row,?"title",?cJSON_CreateString(title[i]));?? cJSON_AddItemToObject(row,?"url",?cJSON_CreateString(url[i]));?? }?? ?? //?打印并釋放?? out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? //?控制臺輸出?? #if?0?? {?? "total":?3,?? "rows":?[{?? "title":?"樹莓派學習筆記——索引博文",?? "url":?"http://blog.csdn.net/xukai871105/article/details/23115627"?? },?{?? "title":?"樹莓派學習筆記——GPIO功能學習",?? "url":?"http://blog.csdn.net/xukai871105/article/details/12684617"?? },?{?? "title":?"物聯網學習筆記——索引博文",?? "url":?"http://blog.csdn.net/xukai871105/article/details/23366187"?? }]?? }?? #endif?? }??
? ? 【簡單說明】
rows為JSON對象,rows對象中嵌套JSON數組,每一個JSON數組的元素又是一個JSON對象,該該對象名為row,row對象中具有兩個鍵值對,分別是titile和url。
2015/08/19 17:50
【其他參考示例】
1. 函數的使用
宏的定義原型: /* Macros for creating things quickly. */ #define cJSON_AddNullToObject(object,name) ? ? ?cJSON_AddItemToObject(object, name, cJSON_CreateNull()) #define cJSON_AddTrueToObject(object,name) ? ? ?cJSON_AddItemToObject(object, name, cJSON_CreateTrue()) #define cJSON_AddFalseToObject(object,name) ? ? cJSON_AddItemToObject(object, name, cJSON_CreateFalse()) #define cJSON_AddBoolToObject(object,name,b) ? ?cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) #define cJSON_AddNumberToObject(object,name,n) ?cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) #define cJSON_AddStringToObject(object,name,s) ?cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
示例: cJSON *root = cJSON_CreateObject(); ?//先創建一個對象 cJSON_AddNumberToObject(root, "value", 123.4); cJSON_AddStringToObject(root, "year", "2015"); cJSON_AddNullToObject(root, "secret"); cJSON_AddTrueToObject(root, "Bool"); cJSON_AddFalseToObject(root, "false"); cJSON_AddBoolToObject(root, "Yes", 3); cJSON_AddBoolToObject(root, "Yes", 0); out = cJSON_Print(root); ? ?//打印對象 //out = cJSON_PrintUnformatted(root);??//非格式化的打印 //printf("===> 2: %s\n", out); printf("%s\n", out); cJSON_Delete(root); ?//釋放對象所占的內存 free(out);
函數的原型: /* These calls create a cJSON item of the appropriate type. */ extern cJSON *cJSON_CreateNull(void); extern cJSON *cJSON_CreateTrue(void); extern cJSON *cJSON_CreateFalse(void); extern cJSON *cJSON_CreateBool(int b); extern cJSON *cJSON_CreateNumber(double num); extern cJSON *cJSON_CreateString(const char *string); extern cJSON *cJSON_CreateArray(void); extern cJSON *cJSON_CreateObject(void);
示例:參考上面博客的代碼
函數原型: /* These utilities create an Array of count items. */ extern cJSON *cJSON_CreateIntArray(const int *numbers,int count); extern cJSON *cJSON_CreateFloatArray(const float *numbers,int count); extern cJSON *cJSON_CreateDoubleArray(const double *numbers,int count); extern cJSON *cJSON_CreateStringArray(const char **strings,int count);
/* Append item to the specified array/object. */ extern void cJSON_AddItemToArray(cJSON *array, cJSON *item); extern void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item); extern void cJSON_AddItemToObjectCS(cJSON *object,const char *string,cJSON *item);?
示例: char *out = NULL; ? int array[] = {1, 2, 3, 4}; int array1[] = {1, 2, 3, 4, 5, 6}; cJSON *json = NULL; cJSON *item = NULL; cJSON *tmp = NULL;
json ?= cJSON_CreateObject(); //cJSON_AddItemToObject(json,"array", ?cJSON_CreateIntArray(array, 4));??//與下面兩行等價 item = cJSON_CreateIntArray(array, 4); cJSON_AddItemToObject(json, "array", item); out = cJSON_Print(json); printf("%s\n", out);
printf("=========================\n"); printf("size: %d\n", cJSON_GetArraySize(item)); ?//輸出為4 ?4個元素
tmp = cJSON_GetArrayItem(json, 0); ?//獲取json中的第一個節點 if (NULL != tmp) { ? printf("ok..\n"); ? printf("size: %d\n", cJSON_GetArraySize(tmp)); } ? else printf("error...\n");
? ? //此時item數組中的元素有 ?1 2 3 4 5 6 7? printf("=========================\n"); cJSON_AddItemToArray(item, cJSON_CreateNumber(5)); cJSON_AddItemToArray(item, cJSON_CreateNumber(6)); cJSON_AddItemToArray(item, cJSON_CreateNumber(7)); printf("size: %d\n", cJSON_GetArraySize(item)); out = cJSON_Print(json); printf("%s\n", out);
tmp = cJSON_CreateIntArray(array1, 6); ? ? //cJSON_AddItemToObject(json, "array1", tmp); ? //好像與下面一句話等價呢 cJSON_AddItemReferenceToObject(json, "array1", tmp); out = cJSON_Print(json); printf("%s\n", out);
? ? //整形數組的參考示例 int array3[] = {1, 3, 5, 7, 9}; json = cJSON_CreateIntArray(array3, 5); out = cJSON_Print(json); ??cJSON_Delete(json); ???printf("%s\n", out); ??free(out);?
? ? //字符指針數組 const char *strings[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; json = cJSON_CreateStringArray(strings, 7); ? ? ? out = cJSON_Print(json); ???cJSON_Delete(json); ??printf("%s\n", out); ??free(out);?
參考博客:http://blog.csdn.net/xukai871105/article/details/33013455
【創建JSON數組】cJSON *cJSON_CreateArray(void);
? ? 【2】兩種添加 【向對象中添加】voidcJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
【向數組中添加】void cJSON_AddItemToArray(cJSON *array, cJSON *item);
? ? 【3】常用幾招 【向對象中增加數字】cJSON_AddItemToObject(root, "value", cJSON_CreateNumber(value));
【向對象中增加文件】cJSON_AddItemToObject(root, "string", cJSON_CreateString(string));
? ? 【4】JSON嵌套 【向對象中增加數組】cJSON_AddItemToObject(root, "rows", rows = cJSON_CreateArray());
【向數組中增加對象】cJSON_AddItemToArray(rows, row = cJSON_CreateObject());
2.創建各種各樣的JSON數據包 在這里通過代碼舉幾個例子,更多的內容請查看代碼倉庫中的相關文件。
? ? 【1】JSON數字 [cpp]?view plaincopy
? ? 【2】JSON字符串 [cpp]?view plaincopy
? ? 【3】JSON布爾類型 [cpp]?view plaincopy
3.JSON格式嵌套 JSON格式在使用時往往存在嵌套,例如JSON對象中嵌套JSON數組而JSON數組中嵌套JSON對象,下面就通過幾個簡單的例子說明問題。
? ? 【1】JSON簡單嵌套 [cpp]?view plaincopy
2015/08/19 17:50
【其他參考示例】
1. 函數的使用
宏的定義原型: /* Macros for creating things quickly. */ #define cJSON_AddNullToObject(object,name) ? ? ?cJSON_AddItemToObject(object, name, cJSON_CreateNull()) #define cJSON_AddTrueToObject(object,name) ? ? ?cJSON_AddItemToObject(object, name, cJSON_CreateTrue()) #define cJSON_AddFalseToObject(object,name) ? ? cJSON_AddItemToObject(object, name, cJSON_CreateFalse()) #define cJSON_AddBoolToObject(object,name,b) ? ?cJSON_AddItemToObject(object, name, cJSON_CreateBool(b)) #define cJSON_AddNumberToObject(object,name,n) ?cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n)) #define cJSON_AddStringToObject(object,name,s) ?cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
示例: cJSON *root = cJSON_CreateObject(); ?//先創建一個對象 cJSON_AddNumberToObject(root, "value", 123.4); cJSON_AddStringToObject(root, "year", "2015"); cJSON_AddNullToObject(root, "secret"); cJSON_AddTrueToObject(root, "Bool"); cJSON_AddFalseToObject(root, "false"); cJSON_AddBoolToObject(root, "Yes", 3); cJSON_AddBoolToObject(root, "Yes", 0); out = cJSON_Print(root); ? ?//打印對象 //out = cJSON_PrintUnformatted(root);??//非格式化的打印 //printf("===> 2: %s\n", out); printf("%s\n", out); cJSON_Delete(root); ?//釋放對象所占的內存 free(out);
函數的原型: /* These calls create a cJSON item of the appropriate type. */ extern cJSON *cJSON_CreateNull(void); extern cJSON *cJSON_CreateTrue(void); extern cJSON *cJSON_CreateFalse(void); extern cJSON *cJSON_CreateBool(int b); extern cJSON *cJSON_CreateNumber(double num); extern cJSON *cJSON_CreateString(const char *string); extern cJSON *cJSON_CreateArray(void); extern cJSON *cJSON_CreateObject(void);
示例:參考上面博客的代碼
函數原型: /* These utilities create an Array of count items. */ extern cJSON *cJSON_CreateIntArray(const int *numbers,int count); extern cJSON *cJSON_CreateFloatArray(const float *numbers,int count); extern cJSON *cJSON_CreateDoubleArray(const double *numbers,int count); extern cJSON *cJSON_CreateStringArray(const char **strings,int count);
/* Append item to the specified array/object. */ extern void cJSON_AddItemToArray(cJSON *array, cJSON *item); extern void cJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item); extern void cJSON_AddItemToObjectCS(cJSON *object,const char *string,cJSON *item);?
示例: char *out = NULL; ? int array[] = {1, 2, 3, 4}; int array1[] = {1, 2, 3, 4, 5, 6}; cJSON *json = NULL; cJSON *item = NULL; cJSON *tmp = NULL;
json ?= cJSON_CreateObject(); //cJSON_AddItemToObject(json,"array", ?cJSON_CreateIntArray(array, 4));??//與下面兩行等價 item = cJSON_CreateIntArray(array, 4); cJSON_AddItemToObject(json, "array", item); out = cJSON_Print(json); printf("%s\n", out);
printf("=========================\n"); printf("size: %d\n", cJSON_GetArraySize(item)); ?//輸出為4 ?4個元素
tmp = cJSON_GetArrayItem(json, 0); ?//獲取json中的第一個節點 if (NULL != tmp) { ? printf("ok..\n"); ? printf("size: %d\n", cJSON_GetArraySize(tmp)); } ? else printf("error...\n");
? ? //此時item數組中的元素有 ?1 2 3 4 5 6 7? printf("=========================\n"); cJSON_AddItemToArray(item, cJSON_CreateNumber(5)); cJSON_AddItemToArray(item, cJSON_CreateNumber(6)); cJSON_AddItemToArray(item, cJSON_CreateNumber(7)); printf("size: %d\n", cJSON_GetArraySize(item)); out = cJSON_Print(json); printf("%s\n", out);
tmp = cJSON_CreateIntArray(array1, 6); ? ? //cJSON_AddItemToObject(json, "array1", tmp); ? //好像與下面一句話等價呢 cJSON_AddItemReferenceToObject(json, "array1", tmp); out = cJSON_Print(json); printf("%s\n", out);
? ? //整形數組的參考示例 int array3[] = {1, 3, 5, 7, 9}; json = cJSON_CreateIntArray(array3, 5); out = cJSON_Print(json); ??cJSON_Delete(json); ???printf("%s\n", out); ??free(out);?
? ? //字符指針數組 const char *strings[7]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; json = cJSON_CreateStringArray(strings, 7); ? ? ? out = cJSON_Print(json); ???cJSON_Delete(json); ??printf("%s\n", out); ??free(out);?
參考博客:http://blog.csdn.net/xukai871105/article/details/33013455
總結
以上是生活随笔為你收集整理的【cJSON】CJSON学习笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【cJSon】cJSON学习笔记(一)
- 下一篇: gradle idea java ssm