C語言中,使用JSON樹加載是一種非常有效的方式。JSON樹是指將JSON格式的數據轉換成一種樹形結構,這樣可以方便地對數據進行操作和處理。下面我們來看一下如何使用C語言來實現JSON樹的加載。
// 這里為了方便,我們使用了 cJSON 庫。這是一款開源的 JSON 解析庫,下載地址:https://github.com/DaveGamble/cJSON #include#include #include #include "cJSON.h" // 遞歸解析 JSON 樹 void parse_json_tree(cJSON* root) { int i; cJSON* item = NULL; if (!root) { return; } // 打印當前節點名稱,如果沒有名稱則打印空字符串 printf("node name: %s\n", root->string ? root->string : ""); // 處理當前節點的子節點 cJSON_ArrayForEach(item, root) { switch (item->type) { case cJSON_Object: printf("object:\n"); parse_json_tree(item); break; case cJSON_Array: printf("array:\n"); parse_json_tree(item); break; case cJSON_String: printf("string: %s\n", item->valuestring); break; case cJSON_Number: printf("number: %g\n", item->valuedouble); break; case cJSON_True: printf("true: %d\n", item->valueint); break; } } } int main(int argc, char** argv) { const char* json_string = "{\"name\":\"John\",\"age\":20,\"location\":{\"city\":\"New York\",\"country\":\"USA\"}}"; cJSON* root = cJSON_Parse(json_string); if (!root) { printf("Error: Failed to parse JSON string!\n"); return -1; } printf("parsed json:\n"); parse_json_tree(root); cJSON_Delete(root); return 0; }
上面的代碼中,我們先定義了一個 parse_json_tree 函數。這個函數用來遞歸解析 JSON 樹。在函數中,我們使用了 cJSON 庫提供的 cJSON_ArrayForEach 宏來遍歷當前節點的所有子節點。然后根據子節點的類型進行相應的處理,例如打印節點名稱、節點值等。當子節點是對象或數組類型時遞歸處理之。
在主函數中,我們使用 cJSON_Parse 函數將一個 JSON 字符串轉換成 cJSON 對象。如果解析失敗,則會返回空指針。接下來我們調用 parse_json_tree 函數來處理 cJSON 對象。最后使用 cJSON_Delete 函數釋放資源。