對于需要訪問多層JSON數據的C語言開發人員來說,實現此目標并不算困難。C語言本身并未提供JSON操作的內置函數,但我們可以使用第三方JSON庫來輕松地管理JSON數據。
?在下面的代碼示例中,我將使用cJSON庫來解析JSON數據,并介紹如何以遞歸方式訪問多層JSON數據。
?#include <stdio.h> #include <stdlib.h> #include <cjson/cJSON.h> void printJSON(cJSON* json) { if(json != NULL) { switch(json->type) { case cJSON_False: printf("false\n"); break; case cJSON_True: printf("true\n"); break; case cJSON_NULL: printf("null\n"); break; case cJSON_Number: printf("%g\n", json->valuedouble); break; case cJSON_String: printf("%s\n", json->valuestring); break; case cJSON_Array: for(int i = 0; i < cJSON_GetArraySize(json); i++) { printJSON(cJSON_GetArrayItem(json, i)); } break; case cJSON_Object: cJSON *child = json->child; while(child != NULL) { printf("%s:\n", child->string); printJSON(child); child = child->next; } break; default: break; } } } int main() { char* jsonString = "{\"name\":\"John\",\"age\":30,\"cars\":[{\"model\":\"Audi\",\"year\":2021},{\"model\":\"BMW\",\"year\":2022}],\"city\":\"New York\"}"; cJSON* json = cJSON_Parse(jsonString); printJSON(json); cJSON_Delete(json); return 0; }
此代碼使用cJSON_Parse函數從JSON字符串中解析JSON數據,并使用printJSON函數以遞歸方式訪問并打印JSON數據。printJSON函數使用switch-case語句和cJSON庫提供的不同類型函數(例如cJSON_GetArrayItem)逐個訪問JSON數據。
?請注意,我們可以使用該代碼訪問任意層數的JSON數據,只需使用適當的遞歸調用即可。
下一篇vue加載外部頁面