欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c json 反序列一對(duì)多

在 C 語(yǔ)言中,使用 JSON 格式來(lái)進(jìn)行序列化和反序列化是一種非常方便的方法。在反序列化 JSON 數(shù)據(jù)的時(shí)候,可能遇到一對(duì)多的情況,即一個(gè) JSON 對(duì)象中包含多個(gè)同種類型的數(shù)據(jù)。下面介紹一下如何在 C 中進(jìn)行 JSON 反序列化時(shí),處理一對(duì)多的數(shù)據(jù)。

// 假設(shè) JSON 數(shù)據(jù)如下:
{
"students": [
{"name": "Tom", "age": 18},
{"name": "Jerry", "age": 20},
{"name": "Leo", "age": 22}
]
}
// 對(duì)應(yīng)的 C 結(jié)構(gòu)體如下:
typedef struct student {
char name[20];
int age;
} Student;
typedef struct data {
Student *students;
int count;
} Data;

上面的 JSON 數(shù)據(jù)中,包含一個(gè)名為“students”的數(shù)組,里面包含了三個(gè)學(xué)生的信息。為了方便處理這種一對(duì)多的情況,我們可以將這個(gè)數(shù)組轉(zhuǎn)換成一個(gè)結(jié)構(gòu)體數(shù)組,然后再將結(jié)構(gòu)體數(shù)組賦值給一個(gè)數(shù)據(jù)結(jié)構(gòu)體。最后,通過(guò)遍歷數(shù)據(jù)結(jié)構(gòu)體中的結(jié)構(gòu)體數(shù)組,就可以得到所有的學(xué)生信息。

// 使用 cJSON 庫(kù)進(jìn)行反序列化
cJSON *root = cJSON_Parse(jsonData);
// 獲取數(shù)組節(jié)點(diǎn)
cJSON *studentsNode = cJSON_GetObjectItem(root, "students");
// 獲取數(shù)組長(zhǎng)度
int count = cJSON_GetArraySize(studentsNode);
// 分配內(nèi)存空間
Data data;
data.students = (Student *)malloc(sizeof(Student) * count);
data.count = count;
// 遍歷數(shù)組節(jié)點(diǎn)
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);
}
// 釋放內(nèi)存空間
cJSON_Delete(root);

上面的代碼中,首先用 cJSON 庫(kù)進(jìn)行反序列化,然后通過(guò) cJSON_GetObjectItem 函數(shù)獲取數(shù)組節(jié)點(diǎn),再通過(guò) cJSON_GetArraySize 函數(shù)獲取數(shù)組長(zhǎng)度,分配內(nèi)存空間。接著,遍歷數(shù)組節(jié)點(diǎn),獲取每個(gè)學(xué)生的信息,將其賦值給結(jié)構(gòu)體數(shù)組。最后,通過(guò) cJSON_Delete 函數(shù)釋放內(nèi)存空間。

這樣,就可以方便地處理一對(duì)多的 JSON 數(shù)據(jù)了。