JSON(JavaScript Object Notation)是一種常用的數據交換格式,也是一種輕量級的數據交換格式。有時候我們需要在 C 語言中讀取 JSON 對象中的數據,這就需要用到 C 語言遍歷 JSON 對象的技巧。
在 C 語言中,我們可以使用 cJSON 庫來解析 JSON 對象。cJSON 是一個輕量級的、簡單易用的 C 語言庫,它可以將 JSON 數據轉換成 C 語言中的結構體或數組,非常適用于嵌入式系統開發。下面我們來看看如何使用 cJSON 庫遍歷 JSON 對象。
// 在 C 語言中使用 cJSON 解析 JSON 對象 #include <cJSON.h> #include <stdio.h> int main(int argc, char const *argv[]) { char *json_str = "{\"name\":\"Tom\",\"age\":18,\"cities\":[\"Beijing\",\"Shanghai\"]}"; // 解析 JSON 對象 cJSON *root = cJSON_Parse(json_str); // 獲取 JSON 對象中的 name 屬性 cJSON *name = cJSON_GetObjectItem(root, "name"); printf("name: %s\n", name->valuestring); // 獲取 JSON 對象中的 age 屬性 cJSON *age = cJSON_GetObjectItem(root, "age"); printf("age: %d\n", age->valueint); // 獲取 JSON 對象中的 cities 屬性 cJSON *cities = cJSON_GetObjectItem(root, "cities"); // 遍歷 cities 數組 cJSON *city = NULL; cJSON_ArrayForEach(city, cities) { printf("city: %s\n", city->valuestring); } // 釋放 cJSON 對象占用的內存 cJSON_Delete(root); return 0; }
上面的例子中,我們定義了一個 JSON 字符串,然后使用 cJSON_Parse 函數解析該字符串,得到一個 cJSON 結構體指針 root。接著,我們使用 cJSON_GetObjectItem 函數獲取 JSON 對象中的屬性,遍歷 cities 屬性中的數組,最后使用 cJSON_Delete 函數釋放 cJSON 對象占用的內存。
在遍歷 JSON 對象的過程中,我們可以使用 cJSON_ArrayForEach 函數遍歷 cJSON_Array 類型的數組,使用 cJSON_GetArraySize 函數獲取數組的長度,使用 cJSON_GetArrayItem 函數獲取數組中的元素。除此之外,我們還可以使用 cJSON_XXX 函數獲取 JSON 對象中的屬性,如 cJSON_GetObjectItem、cJSON_GetObjectItemCaseSensitive、cJSON_GetArrayItem、cJSON_GetArraySize 等。需要注意的是,在使用 cJSON 函數操作 JSON 對象時,一定要先使用 cJSON_Parse 函數將 JSON 字符串解析成 cJSON 結構體指針,再進行操作,最后使用 cJSON_Delete 函數釋放 cJSON 對象占用的內存。