c JSON是一個能夠解析JSON數據格式的C語言庫,使用它可以實現JSON數據格式的解析及生成。c JSON多嵌套是指JSON數據格式中含有多層嵌套結構,其實在實際的開發中大部分的JSON接口都存在嵌套結構,是非常常見的情況。
c JSON提供了parse函數,可以將JSON格式的字符串解析為JSON對象,而JSON對象又可以是一個數組或者嵌套的對象。對于嵌套的情況,可以通過遞歸來解決。
/** * 遞歸遍歷 */ static void process_json(cJSON *root) { if(!root) return; switch (root->type) { case cJSON_NULL: printf("NULL\n"); break; case cJSON_False: printf("false\n"); break; case cJSON_True: printf("true\n"); break; case cJSON_Number: printf("number: %g\n", root->valuedouble); break; case cJSON_String: printf("string: %s\n", root->valuestring); break; case cJSON_Array: printf("array:\n"); int size = cJSON_GetArraySize(root); for (int i=0; ichild; while (item) { printf("%s:\n", item->string); process_json(item); item = item->next; } break; default: printf("Unknown type:%d\n", root->type); break; } } int main() { const char *json_str = " { \"name\": \"Peter\", \"age\": 20, \"pets\": [ { \"name\": \"Tom\", \"age\": 3 }, { \"name\": \"Jerry\", \"age\": 2 } ] }"; // 解析字符串為JSON對象 cJSON *root = cJSON_Parse(json_str); // 處理JSON對象 process_json(root); // 釋放內存 cJSON_Delete(root); return 0; }
上面的代碼中,遞歸遍歷實現了對多嵌套JSON數據的解析。在array和object類型中,需要通過cJSON_GetArrayItem和root->child/root->next來獲取其中的元素,進而進行遞歸解析。