cJSON官網例子淺析
阿新 • • 發佈:2020-11-18
cJSON結構體
/* The cJSON structure: */ typedef struct cJSON { struct cJSON *next; struct cJSON *prev; struct cJSON *child; int type; char *valuestring; /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */ int valueint; double valuedouble; char *string; } cJSON
type表示cJSON的型別, 包括:cJSON_Number
,cJSON_String
,cJSON_Array
,cJSON_Object
等。
使用cJSON_Is...相關函式來判斷cJSON的type
next, prev, child 用於
• 向cJSON_Object
中新增成員
• 向cJSON_Array新增成員
• 通過key 查詢 值
• 遍歷陣列
向cJSON_Object, cJSON_Array 新增成員都是讓prev指向新的cJSON結構體(需要改變指標)
區別是, 陣列中的全部成員對應一個key。
key:value
“age”:[12,23,34,55]
"name":"jojo"
valuestring, valueint, valuedouble 表示 值
string 表示key
##整個陣列對應一個key。
官網例子
官網例子
build cJSON
{ "name": "Awesome 4K", "resolutions": [ { "width": 1280, "height": 720 }, { "width": 1920, "height": 1080 }, {"width": 3840, "height": 2160 } ] }
char *create_monitor(void) { const unsigned int resolution_numbers[3][2] = { {1280, 720}, {1920, 1080}, {3840, 2160} }; char *string = NULL; cJSON *name = NULL; cJSON *resolutions = NULL; cJSON *resolution = NULL; cJSON *width = NULL; cJSON *height = NULL; size_t index = 0; cJSON *monitor = cJSON_CreateObject(); if (monitor == NULL) { goto end; } name = cJSON_CreateString("Awesome 4K"); if (name == NULL) { goto end; } /* after creation was successful, immediately add it to the monitor, * thereby transferring ownership of the pointer to it */ cJSON_AddItemToObject(monitor, "name", name); resolutions = cJSON_CreateArray(); if (resolutions == NULL) { goto end; } cJSON_AddItemToObject(monitor, "resolutions", resolutions); for (index = 0; index < (sizeof(resolution_numbers) / (2 * sizeof(int))); ++index) { resolution = cJSON_CreateObject(); if (resolution == NULL) { goto end; } cJSON_AddItemToArray(resolutions, resolution); width = cJSON_CreateNumber(resolution_numbers[index][0]); if (width == NULL) { goto end; } cJSON_AddItemToObject(resolution, "width", width); height = cJSON_CreateNumber(resolution_numbers[index][1]); if (height == NULL) { goto end; } cJSON_AddItemToObject(resolution, "height", height); } string = cJSON_Print(monitor); if (string == NULL) { fprintf(stderr, "Failed to print monitor.\n"); } end: cJSON_Delete(monitor); return string; }