當(dāng)前位置:
首頁(yè) >
前端技术
> javascript
>内容正文
javascript
【cJSON】CJSON学习笔记(二)
生活随笔
收集整理的這篇文章主要介紹了
【cJSON】CJSON学习笔记(二)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.重要函數(shù)說(shuō)明
? ? 【1】?jī)蓚€(gè)創(chuàng)建
【創(chuàng)建JSON對(duì)象】cJSON *cJSON_CreateObject(void);
【創(chuàng)建JSON數(shù)組】cJSON *cJSON_CreateArray(void);
? ? 【2】?jī)煞N添加 【向?qū)ο笾刑砑印縱oidcJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
【向數(shù)組中添加】void cJSON_AddItemToArray(cJSON *array, cJSON *item);
? ? 【3】常用幾招 【向?qū)ο笾性黾訑?shù)字】cJSON_AddItemToObject(root, "value", cJSON_CreateNumber(value));
【向?qū)ο笾性黾游募縞JSON_AddItemToObject(root, "string", cJSON_CreateString(string));
? ? 【4】JSON嵌套 【向?qū)ο笾性黾訑?shù)組】cJSON_AddItemToObject(root, "rows", rows = cJSON_CreateArray());
【向數(shù)組中增加對(duì)象】cJSON_AddItemToArray(rows, row = cJSON_CreateObject());
2.創(chuàng)建各種各樣的JSON數(shù)據(jù)包 在這里通過(guò)代碼舉幾個(gè)例子,更多的內(nèi)容請(qǐng)查看代碼倉(cāng)庫(kù)中的相關(guān)文件。
? ? 【1】JSON數(shù)字 [cpp]?view plaincopy void?create_single_number(void)?{?? ????cJSON?*root;?? ????char?*out;?? ????int?value?=?24;?? ?? ????root?=?cJSON_CreateObject();?//?創(chuàng)建根?? ?? ????cJSON_AddItemToObject(root,?"value",?cJSON_CreateNumber(value));?? ?? ????//?打印并釋放?? ????out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? ????//?控制臺(tái)輸出?? #if?0?? ????{?? ????????"value":?24?? ????}?? #endif?? }??
? ? 【簡(jiǎn)單說(shuō)明】
【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();?//?創(chuàng)建根?? ????//?方法?使用cJSON_AddItemToObject,推薦使用?? ????cJSON_AddItemToObject(root,?"name",?cJSON_CreateString(name));?? ?? ????//?打印并釋放?? ????out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? ????//?控制臺(tái)輸出?? #if?0?? ????{?? ????????"name":?"xukai871105"?? ????}?? #endif?? }??
? ? 【簡(jiǎn)單說(shuō)明】
【1】?cJSON_AddItemToObject(root, "name", cJSON_CreateString(name));
【2】 cJSON_AddStringToObject(root, "name",name);
【1】和【2】效果完全相同。
? ? 【3】JSON布爾類(lèi)型 [cpp]?view plaincopy void?create_bool(void)?{?? ????cJSON?*root;?? ????char?*out;?? ?? ????root?=?cJSON_CreateObject();?//?創(chuàng)建根?? ?? ????cJSON_AddItemToObject(root,?"success",?cJSON_CreateFalse());?? ?? ????//?打印并釋放?? ????out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? ????//?控制臺(tái)輸出?? #if?0?? ????{?? ????????"success":?false?? ????}?? #endif?? }??
? ? 【簡(jiǎn)單說(shuō)明】
【1】布爾類(lèi)型不需要加引號(hào)。
3.JSON格式嵌套 JSON格式在使用時(shí)往往存在嵌套,例如JSON對(duì)象中嵌套JSON數(shù)組而JSON數(shù)組中嵌套JSON對(duì)象,下面就通過(guò)幾個(gè)簡(jiǎn)單的例子說(shuō)明問(wèn)題。
? ? 【1】JSON簡(jiǎn)單嵌套 [cpp]?view plaincopy void?create_simple(void)?{?? ????cJSON?*root;?? ????char?*out;?? ????int?list[4]?=?{5,6,7,8};?? ?? ????root?=?cJSON_CreateObject();?//?創(chuàng)建根?? ????cJSON_AddItemToObject(root,?"lists",?cJSON_CreateIntArray(list,?4));?? ?? ????//?打印并釋放?? ????out?=?cJSON_Print(root);?cJSON_Delete(root);?printf("%s\n",out);?free(out);?? ?? ????//?控制臺(tái)輸出?? #if?0?? ????{?? ????????"lists":?[5,?6,?7,?8]?? ????}?? #endif?? }??
? ? 【2】JSON復(fù)雜嵌套
[cpp]?view plaincopy void?create_complex(void)?{?? cJSON?*root,?*rows,?*row;?? char?*out;?? int?i?=?0;?? ?? char?*title[3]?=?{?"樹(shù)莓派學(xué)習(xí)筆記——索引博文",?? "樹(shù)莓派學(xué)習(xí)筆記——GPIO功能學(xué)習(xí)",?? "物聯(lián)網(wǎng)學(xué)習(xí)筆記——索引博文"};?? 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();?//?創(chuàng)建根?? 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);?? ?? //?控制臺(tái)輸出?? #if?0?? {?? "total":?3,?? "rows":?[{?? "title":?"樹(shù)莓派學(xué)習(xí)筆記——索引博文",?? "url":?"http://blog.csdn.net/xukai871105/article/details/23115627"?? },?{?? "title":?"樹(shù)莓派學(xué)習(xí)筆記——GPIO功能學(xué)習(xí)",?? "url":?"http://blog.csdn.net/xukai871105/article/details/12684617"?? },?{?? "title":?"物聯(lián)網(wǎng)學(xué)習(xí)筆記——索引博文",?? "url":?"http://blog.csdn.net/xukai871105/article/details/23366187"?? }]?? }?? #endif?? }??
? ? 【簡(jiǎn)單說(shuō)明】
rows為JSON對(duì)象,rows對(duì)象中嵌套JSON數(shù)組,每一個(gè)JSON數(shù)組的元素又是一個(gè)JSON對(duì)象,該該對(duì)象名為row,row對(duì)象中具有兩個(gè)鍵值對(duì),分別是titile和url。
2015/08/19 17:50
【其他參考示例】
1. 函數(shù)的使用
宏的定義原型: /* 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(); ?//先創(chuàng)建一個(gè)對(duì)象 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); ? ?//打印對(duì)象 //out = cJSON_PrintUnformatted(root);??//非格式化的打印 //printf("===> 2: %s\n", out); printf("%s\n", out); cJSON_Delete(root); ?//釋放對(duì)象所占的內(nèi)存 free(out);
函數(shù)的原型: /* 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);
示例:參考上面博客的代碼
函數(shù)原型: /* 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));??//與下面兩行等價(jià) 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個(gè)元素
tmp = cJSON_GetArrayItem(json, 0); ?//獲取json中的第一個(gè)節(jié)點(diǎn) if (NULL != tmp) { ? printf("ok..\n"); ? printf("size: %d\n", cJSON_GetArraySize(tmp)); } ? else printf("error...\n");
? ? //此時(shí)item數(shù)組中的元素有 ?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); ? //好像與下面一句話等價(jià)呢 cJSON_AddItemReferenceToObject(json, "array1", tmp); out = cJSON_Print(json); printf("%s\n", out);
? ? //整形數(shù)組的參考示例 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);?
? ? //字符指針數(shù)組 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
【創(chuàng)建JSON數(shù)組】cJSON *cJSON_CreateArray(void);
? ? 【2】?jī)煞N添加 【向?qū)ο笾刑砑印縱oidcJSON_AddItemToObject(cJSON *object,const char *string,cJSON *item);
【向數(shù)組中添加】void cJSON_AddItemToArray(cJSON *array, cJSON *item);
? ? 【3】常用幾招 【向?qū)ο笾性黾訑?shù)字】cJSON_AddItemToObject(root, "value", cJSON_CreateNumber(value));
【向?qū)ο笾性黾游募縞JSON_AddItemToObject(root, "string", cJSON_CreateString(string));
? ? 【4】JSON嵌套 【向?qū)ο笾性黾訑?shù)組】cJSON_AddItemToObject(root, "rows", rows = cJSON_CreateArray());
【向數(shù)組中增加對(duì)象】cJSON_AddItemToArray(rows, row = cJSON_CreateObject());
2.創(chuàng)建各種各樣的JSON數(shù)據(jù)包 在這里通過(guò)代碼舉幾個(gè)例子,更多的內(nèi)容請(qǐng)查看代碼倉(cāng)庫(kù)中的相關(guān)文件。
? ? 【1】JSON數(shù)字 [cpp]?view plaincopy
? ? 【2】JSON字符串 [cpp]?view plaincopy
? ? 【3】JSON布爾類(lèi)型 [cpp]?view plaincopy
3.JSON格式嵌套 JSON格式在使用時(shí)往往存在嵌套,例如JSON對(duì)象中嵌套JSON數(shù)組而JSON數(shù)組中嵌套JSON對(duì)象,下面就通過(guò)幾個(gè)簡(jiǎn)單的例子說(shuō)明問(wèn)題。
? ? 【1】JSON簡(jiǎn)單嵌套 [cpp]?view plaincopy
2015/08/19 17:50
【其他參考示例】
1. 函數(shù)的使用
宏的定義原型: /* 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(); ?//先創(chuàng)建一個(gè)對(duì)象 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); ? ?//打印對(duì)象 //out = cJSON_PrintUnformatted(root);??//非格式化的打印 //printf("===> 2: %s\n", out); printf("%s\n", out); cJSON_Delete(root); ?//釋放對(duì)象所占的內(nèi)存 free(out);
函數(shù)的原型: /* 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);
示例:參考上面博客的代碼
函數(shù)原型: /* 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));??//與下面兩行等價(jià) 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個(gè)元素
tmp = cJSON_GetArrayItem(json, 0); ?//獲取json中的第一個(gè)節(jié)點(diǎn) if (NULL != tmp) { ? printf("ok..\n"); ? printf("size: %d\n", cJSON_GetArraySize(tmp)); } ? else printf("error...\n");
? ? //此時(shí)item數(shù)組中的元素有 ?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); ? //好像與下面一句話等價(jià)呢 cJSON_AddItemReferenceToObject(json, "array1", tmp); out = cJSON_Print(json); printf("%s\n", out);
? ? //整形數(shù)組的參考示例 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);?
? ? //字符指針數(shù)組 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
總結(jié)
以上是生活随笔為你收集整理的【cJSON】CJSON学习笔记(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【cJSon】cJSON学习笔记(一)
- 下一篇: 【电子电路】上拉电阻与下拉电阻有什么作用