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

C 反序列化成json

榮姿康1年前8瀏覽0評論

C反序列化成JSON是一個常見的操作。在很多情況下,我們需要將C語言中的結(jié)構(gòu)體或其他數(shù)據(jù)類型轉(zhuǎn)換成JSON格式,以便于在網(wǎng)絡(luò)傳輸中或存儲文件中進(jìn)行使用。下面,我們來介紹一下如何使用C語言進(jìn)行反序列化操作。

#include <stdio.h>
#include <jansson.h>
typedef struct{
int id;
char name[20];
double score;
} Student;
int main(){
const char *json_str = "{\"id\":123,\"name\":\"Tom\",\"score\":99}";
json_error_t error;
json_t *root;
// 從JSON格式的字符串中讀取數(shù)據(jù)并封裝成JSON對象
root = json_loads(json_str, 0, &error);
if (!root){
fprintf(stderr, "json_loads error: on line: %d, column: %d, text: %s\n",
error.line, error.column, error.text);
return -1;
}
Student student;
// 解析JSON對象中的數(shù)據(jù)
json_t *id = json_object_get(root, "id");
if(!json_is_integer(id)){
printf("Error: id is not integer\n");
return -1;
}
student.id = json_integer_value(id);
json_t *name = json_object_get(root, "name");
if(!json_is_string(name)){
printf("Error: name is not string\n");
return -1;
}
strcpy(student.name, json_string_value(name));
json_t *score = json_object_get(root, "score");
if(!json_is_real(score)){
printf("Error: score is not real\n");
return -1;
}
student.score = json_real_value(score);
// 打印解析出的結(jié)果
printf("Student: id=%d\tname=%s\tscore=%f\n", student.id, student.name, student.score);
// 釋放內(nèi)存
json_decref(root);
return 0;
}

上述代碼通過調(diào)用json_loads()函數(shù)將JSON格式的字符串轉(zhuǎn)換為JSON對象,然后使用json_object_get()函數(shù)從JSON對象中取出對應(yīng)的值,并使用json_is_xxx()函數(shù)判斷值的類型,最后再通過json_xxx_value()函數(shù)取出具體的值。其中,json_t為封裝JSON數(shù)據(jù)的結(jié)構(gòu)體,json_error_t為記錄錯誤信息的結(jié)構(gòu)體。

通過反序列化操作,我們可以方便地將C語言中的數(shù)據(jù)轉(zhuǎn)換為JSON格式,實現(xiàn)數(shù)據(jù)的傳輸和存儲。