在C語言中,JSON反序列化是一個非常常見的操作。在C語言中,使用JSON-C庫來處理JSON數據是非常方便的。而其中,反序列化JSON數組是一個經常需要處理的需求。
首先,我們需要明確JSON數組的數據結構。JSON數組是由一組以逗號分隔的值組成,而這些值可以是字符串、數字、布爾值、對象或者其他的數組。在C語言中,我們可以使用json_type_array類型來表示JSON數組。
#include "json-c/json.h"
#include <stdio.h>int main()
{
char *json_str = "[1, 2, 3]"; // 假設我們有一個JSON數組
json_object *json = json_tokener_parse(json_str);
enum json_type type = json_object_get_type(json);
if (type == json_type_array) {
int array_size = json_object_array_length(json);
for (int i = 0; i < array_size; i++) {
json_object *value = json_object_array_get_idx(json, i);
enum json_type value_type = json_object_get_type(value);
switch (value_type) {
case json_type_int:
printf("%d\n", json_object_get_int(value));
break;
// 其他類型的數據處理
default:
break;
}
}
}
json_object_put(json);
return 0;
}
在上述代碼中,我們首先定義一個JSON數組的字符串(實際上可以從文件或網絡中讀取),然后使用json_tokener_parse函數將其反序列化成一個json_object對象。使用json_object_get_type函數可以獲取JSON數組的類型,如果為json_type_array,則可以使用json_object_array_length獲取數組長度,并且可以使用json_object_array_get_idx獲取數組中指定下標的元素,再使用json_object_get_type獲取元素的類型,最后根據類型進行相應的處理。
需要注意的是,在使用完json_object對象后,需要使用json_object_put函數進行釋放,否則會造成內存泄漏。