cJSON是一個(gè)輕量級(jí)的JSON解析庫(kù),它能夠快速解析和生成JSON數(shù)據(jù)。在C語(yǔ)言中,使用cJSON可以很方便地解析JSON格式的數(shù)據(jù),獲取其中的各種值。
在cJSON中,要遍歷JSON數(shù)據(jù),首先要?jiǎng)?chuàng)建一個(gè)cJSON對(duì)象,并將JSON數(shù)據(jù)解析到該對(duì)象中。然后,使用cJSON的各種函數(shù)讀取JSON數(shù)據(jù)中的值。
下面是一個(gè)簡(jiǎn)單的JSON數(shù)據(jù):
{ "name": "Tom", "age": 28, "isMarried": false, "address": { "city": "Beijing", "province": "Beijing" }, "hobby": ["reading", "traveling", "swimming"] }
要遍歷該JSON數(shù)據(jù),可以按照以下步驟進(jìn)行:
// 創(chuàng)建一個(gè)cJSON對(duì)象 cJSON *root = cJSON_Parse(jsonString); // 獲取name值 cJSON *name = cJSON_GetObjectItem(root, "name"); printf("name: %s\n", name->valuestring); // 獲取age值 cJSON *age = cJSON_GetObjectItem(root, "age"); printf("age: %d\n", age->valueint); // 獲取isMarried值 cJSON *isMarried = cJSON_GetObjectItem(root, "isMarried"); printf("isMarried: %d\n", isMarried->valueint); // 獲取address對(duì)象 cJSON *address = cJSON_GetObjectItem(root, "address"); // 獲取address中的city值 cJSON *city = cJSON_GetObjectItem(address, "city"); printf("city: %s\n", city->valuestring); // 獲取address中的province值 cJSON *province = cJSON_GetObjectItem(address, "province"); printf("province: %s\n", province->valuestring); // 獲取hobby數(shù)組 cJSON *hobby = cJSON_GetObjectItem(root, "hobby"); // 遍歷hobby數(shù)組 int i, arraySize = cJSON_GetArraySize(hobby); for(i = 0; i< arraySize; i++) { cJSON *hobbyItem = cJSON_GetArrayItem(hobby, i); printf("hobby%d: %s\n", i, hobbyItem->valuestring); } // 釋放cJSON對(duì)象 cJSON_Delete(root);
通過(guò)以上代碼,我們可以方便地獲取JSON數(shù)據(jù)中需要的值,實(shí)現(xiàn)數(shù)據(jù)的解析和處理。