JSON是一種輕量級的數(shù)據(jù)交換格式,它有著類似于字典的形式,可以包含list和map兩種數(shù)據(jù)結(jié)構(gòu),在C語言中解析JSON數(shù)據(jù),可以使用現(xiàn)有的第三方庫,例如cJSON。
使用cJSON解析JSON數(shù)據(jù),需要先導(dǎo)入cJSON頭文件,然后使用cJSON_Parse函數(shù)將JSON數(shù)據(jù)轉(zhuǎn)換為cJSON結(jié)構(gòu)。在cJSON結(jié)構(gòu)中,list使用cJSON_Array對象,map使用cJSON_Object對象。
#include "cJSON.h" ... cJSON *root = cJSON_Parse(jsonStr); if (root == NULL) { // JSON數(shù)據(jù)解析失敗 return; } // 解析list cJSON *list = cJSON_GetObjectItem(root, "list"); if (list != NULL && cJSON_IsArray(list)) { int size = cJSON_GetArraySize(list); for (int i = 0; i< size; i++) { cJSON *item = cJSON_GetArrayItem(list, i); if (item == NULL || !cJSON_IsObject(item)) { continue; } // 解析map cJSON *name = cJSON_GetObjectItem(item, "name"); cJSON *age = cJSON_GetObjectItem(item, "age"); if (name != NULL && age != NULL && cJSON_IsString(name) && cJSON_IsNumber(age)) { printf("name: %s age: %d\n", name->valuestring, age->valueint); } } } cJSON_Delete(root);
在解析JSON數(shù)據(jù)時,需要使用cJSON提供的API函數(shù),例如cJSON_Parse、cJSON_GetObjectItem、cJSON_GetArraySize、cJSON_GetArrayItem等函數(shù)。使用這些函數(shù)可以方便地讀取JSON數(shù)據(jù)中的具體信息。
總的來說,使用cJSON解析JSON數(shù)據(jù)非常方便,只需要導(dǎo)入頭文件、調(diào)用相關(guān)函數(shù)即可獲取JSON數(shù)據(jù)中的信息。同時,cJSON還支持將JSON數(shù)據(jù)轉(zhuǎn)換為字符串、添加數(shù)據(jù)到JSON數(shù)據(jù)中等功能。
上一篇db.json