JSON(JavaScript Object Notation),是一種輕量級(jí)的數(shù)據(jù)交換格式,在前端開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)將后端傳來(lái)的數(shù)據(jù)解析為JSON格式。
C語(yǔ)言中有一個(gè)輕量級(jí)的JSON解析庫(kù)——cJSON。cJSON不僅可以用于解析JSON格式的數(shù)據(jù),并且還能用于生成JSON格式的數(shù)據(jù)。
在cJSON中,有一種很方便的數(shù)據(jù)結(jié)構(gòu)——迭代器(iterator)。使用迭代器可以方便地遍歷cJSON中的每個(gè)元素。
cJSON *root = cJSON_Parse(json); if (root != NULL) { cJSON *item = NULL; cJSON_ArrayForEach(item, root) { printf("%s\n", cJSON_Print(item)); } cJSON_Delete(root); }
上面的代碼可以遍歷一個(gè)cJSON對(duì)象root中的所有元素,并輸出每個(gè)元素的值。在這個(gè)例子中,我們使用了cJSON_ArrayForEach宏來(lái)遍歷cJSON數(shù)組。
除了遍歷數(shù)組之外,cJSON還支持遍歷對(duì)象和字符串。下面是遍歷對(duì)象和字符串的代碼示例。
// 遍歷cJSON對(duì)象 cJSON *root = cJSON_Parse(json); if (root != NULL) { cJSON *item = NULL; cJSON_ObjectForEach(item, root) { printf("%s: %s\n", item->string, cJSON_Print(item)); } cJSON_Delete(root); } // 遍歷cJSON字符串 cJSON *root = cJSON_Parse(json); if (root != NULL && root->type == cJSON_String) { cJSON_ArrayForEach(item, root) { printf("%c\n", item->valuestring[i]); } cJSON_Delete(root); }
使用cJSON迭代器可以方便快捷地遍歷cJSON中的每個(gè)元素,使得JSON解析變得更加簡(jiǎn)單。