日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

【cJSON】CJSON学习笔记(二)

發布時間:2024/4/20 javascript 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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

    總結

    以上是生活随笔為你收集整理的【cJSON】CJSON学习笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。