JSON是一種輕量級的數據交互格式,在很多編程語言中都有相應的解析庫。在C語言中,使用cJSON庫可以解析JSON格式的數據。下面介紹如何使用cJSON庫反序列化JSON數組數據。
cJSON庫中提供了函數cJSON_GetArrayItem來獲取數組中的某個元素。該函數的參數為數組對象和元素的索引。例如我們有以下JSON數據:
{ "students": [ {"name":"Tom", "age":18}, {"name":"Alice", "age":20}, {"name":"Bob", "age":19} ] }
要獲取第二個學生的姓名,可以先解析JSON字符串,然后使用以下代碼獲取:
cJSON *root = cJSON_Parse(json_str); // 解析JSON字符串 cJSON *students = cJSON_GetObjectItem(root, "students"); // 獲取數組對象 cJSON *student2 = cJSON_GetArrayItem(students, 1); // 獲取第二個元素 cJSON *name = cJSON_GetObjectItem(student2, "name"); // 獲取姓名屬性 printf("name: %s\n", name->valuestring); // 輸出姓名
在以上代碼中,cJSON_Parse函數將JSON字符串解析成cJSON對象,cJSON_GetObjectItem函數獲取數組對象,cJSON_GetArrayItem函數獲取第二個元素,cJSON_GetObjectItem函數獲取姓名屬性。
需要注意的是,數組索引從0開始,因此獲取第二個元素時索引為1。同時需要判斷返回值是否為NULL,避免空指針異常。
除了使用cJSON_GetArrayItem函數獲取數組元素,也可以使用循環遍歷數組中的所有元素。例如:
int i; cJSON *student; cJSON_ArrayForEach(student, students) { cJSON *name = cJSON_GetObjectItem(student, "name"); cJSON *age = cJSON_GetObjectItem(student, "age"); printf("name: %s, age: %d\n", name->valuestring, age->valueint); }
以上代碼使用cJSON_ArrayForEach函數遍歷數組中的所有元素,并獲取每個學生的姓名和年齡屬性。
在使用cJSON進行JSON反序列化數組時,需要熟悉cJSON庫提供的相關函數,特別注意數組對象的獲取和元素索引的使用。