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

c json 數(shù)組轉(zhuǎn)字符串?dāng)?shù)組對象數(shù)組

錢琪琛1年前8瀏覽0評論

C和JSON是兩種非常常用的編程語言,都有自己獨(dú)特的特點(diǎn)。有時(shí)候我們需要把JSON數(shù)組轉(zhuǎn)成字符串?dāng)?shù)組或者對象數(shù)組,在C語言中實(shí)現(xiàn)這個(gè)功能其實(shí)是非常簡單的。

void json_to_string_array(cJSON *json_array, char **str_array, int num) {
cJSON *json_item = NULL;
int i = 0;
for(i = 0; i< num; i++) {
json_item = cJSON_GetArrayItem(json_array, i);
if(json_item == NULL) {
*(str_array++) = ""; // 如果json_item為NULL,把字符串置空
} else {
*(str_array++) = json_item->valuestring; // 把json字符串拷貝到字符串?dāng)?shù)組中
}
}
}
void json_to_object_array(cJSON *json_array, SomeStruct **struct_array, int num) {
cJSON *json_item = NULL;
int i = 0;
SomeStruct *tmp_struct = NULL;
for(i = 0; i< num; i++) {
json_item = cJSON_GetArrayItem(json_array, i);
tmp_struct = (SomeStruct *)malloc(sizeof(SomeStruct)); // 根據(jù)結(jié)構(gòu)體類型分配內(nèi)存
if(tmp_struct == NULL) {
printf("malloc error!\n");
return;
}
memset(tmp_struct, 0, sizeof(SomeStruct)); // 分配內(nèi)存后需要初始化
tmp_struct->field_one = cJSON_GetObjectItem(json_item, "field_one")->valueint; // 用json數(shù)據(jù)填充結(jié)構(gòu)體
strcpy(tmp_struct->field_two, cJSON_GetObjectItem(json_item, "field_two")->valuestring);
*(struct_array++) = tmp_struct; // 把結(jié)構(gòu)體指針拷貝到結(jié)構(gòu)體數(shù)組中
}
}

可以看到上面兩個(gè)函數(shù)非常簡短,而且非常容易理解。一個(gè)函數(shù)可以把JSON數(shù)組轉(zhuǎn)成字符串?dāng)?shù)組,另一個(gè)函數(shù)可以把JSON數(shù)組轉(zhuǎn)成結(jié)構(gòu)體數(shù)組。

雖然這段代碼非常簡單,但是要注意一點(diǎn),在使用完結(jié)構(gòu)體數(shù)組之后要把數(shù)組中的每個(gè)結(jié)構(gòu)體都手動(dòng)釋放掉。這里只是提醒一下小伙伴們注意這個(gè)問題,不然可能會(huì)導(dǎo)致內(nèi)存泄漏。