Json是一種輕量級的數據交換格式,僅由鍵值對組成,通過不同的數據類型可以表示復雜的數據結構。在C語言中,遍歷和解析Json數據是一個常見的需求。下面介紹一種基于cJSON庫的遍歷方法。
cJSON是一個開源的Json解析庫,具有輕量、快速和簡單易用的特點,在C語言中廣泛應用。
下面我們以以下Json數據為例:
{ "name": "張三", "age": 20, "gender": "male", "hobbies": [ "reading", "swimming", "hiking" ], "education": { "bachelor": "Peking University", "master": "Tsinghua University" } }
我們可以通過以下代碼遍歷Json數據:
#include <stdio.h> #include <cJSON.h> int main() { char *json = "{...}"; //上述Json數據 cJSON *root = cJSON_Parse(json); //解析Json數據 cJSON *name = cJSON_GetObjectItem(root, "name"); //"name"屬性對應的Json對象 printf("name: %s\n", name->valuestring); cJSON *age = cJSON_GetObjectItem(root, "age"); //"age"屬性對應的Json對象 printf("age: %d\n", age->valueint); cJSON *gender = cJSON_GetObjectItem(root, "gender"); //"gender"屬性對應的Json對象 printf("gender: %s\n", gender->valuestring); cJSON *hobbies = cJSON_GetObjectItem(root, "hobbies"); //"hobbies"屬性對應的Json對象 int i; for (i = 0; i < cJSON_GetArraySize(hobbies); i++) { cJSON *hobby = cJSON_GetArrayItem(hobbies, i); //hobbies數組中的Json對象 printf("hobby[%d]: %s\n", i, hobby->valuestring); } cJSON *education = cJSON_GetObjectItem(root, "education"); //"education"屬性對應的Json對象 cJSON *bachelor = cJSON_GetObjectItem(education, "bachelor"); //"bachelor"屬性對應的Json對象 printf("bachelor: %s\n", bachelor->valuestring); cJSON *master = cJSON_GetObjectItem(education, "master"); //"master"屬性對應的Json對象 printf("master: %s\n", master->valuestring); cJSON_Delete(root); //釋放Json對象 return 0; }
在上述代碼中,我們首先通過cJSON_Parse()函數將Json字符串解析成一個Json根對象。接著,利用cJSON_GetObjectItem()和cJSON_GetArrayItem()函數訪問Json數據中的不同屬性和數組元素,并輸出其值。
最后,我們需要通過cJSON_Delete()函數釋放Json對象,以避免內存泄漏。