色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c json 反序列一對多

阮建安2年前8瀏覽0評論

在 C 語言中,使用 JSON 格式來進行序列化和反序列化是一種非常方便的方法。在反序列化 JSON 數據的時候,可能遇到一對多的情況,即一個 JSON 對象中包含多個同種類型的數據。下面介紹一下如何在 C 中進行 JSON 反序列化時,處理一對多的數據。

// 假設 JSON 數據如下:
{
"students": [
{"name": "Tom", "age": 18},
{"name": "Jerry", "age": 20},
{"name": "Leo", "age": 22}
]
}
// 對應的 C 結構體如下:
typedef struct student {
char name[20];
int age;
} Student;
typedef struct data {
Student *students;
int count;
} Data;

上面的 JSON 數據中,包含一個名為“students”的數組,里面包含了三個學生的信息。為了方便處理這種一對多的情況,我們可以將這個數組轉換成一個結構體數組,然后再將結構體數組賦值給一個數據結構體。最后,通過遍歷數據結構體中的結構體數組,就可以得到所有的學生信息。

// 使用 cJSON 庫進行反序列化
cJSON *root = cJSON_Parse(jsonData);
// 獲取數組節點
cJSON *studentsNode = cJSON_GetObjectItem(root, "students");
// 獲取數組長度
int count = cJSON_GetArraySize(studentsNode);
// 分配內存空間
Data data;
data.students = (Student *)malloc(sizeof(Student) * count);
data.count = count;
// 遍歷數組節點
for (int i = 0; i< count; i++) {
cJSON *item = cJSON_GetArrayItem(studentsNode, i);
cJSON *nameNode = cJSON_GetObjectItem(item, "name");
cJSON *ageNode = cJSON_GetObjectItem(item, "age");
strcpy(data.students[i].name, cJSON_GetStringValue(nameNode));
data.students[i].age = cJSON_GetNumberValue(ageNode);
}
// 釋放內存空間
cJSON_Delete(root);

上面的代碼中,首先用 cJSON 庫進行反序列化,然后通過 cJSON_GetObjectItem 函數獲取數組節點,再通過 cJSON_GetArraySize 函數獲取數組長度,分配內存空間。接著,遍歷數組節點,獲取每個學生的信息,將其賦值給結構體數組。最后,通過 cJSON_Delete 函數釋放內存空間。

這樣,就可以方便地處理一對多的 JSON 數據了。