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

C 反序列化成json

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

C反序列化成JSON是一個常見的操作。在很多情況下,我們需要將C語言中的結構體或其他數據類型轉換成JSON格式,以便于在網絡傳輸中或存儲文件中進行使用。下面,我們來介紹一下如何使用C語言進行反序列化操作。

#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格式的字符串中讀取數據并封裝成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對象中的數據
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);
// 打印解析出的結果
printf("Student: id=%d\tname=%s\tscore=%f\n", student.id, student.name, student.score);
// 釋放內存
json_decref(root);
return 0;
}

上述代碼通過調用json_loads()函數將JSON格式的字符串轉換為JSON對象,然后使用json_object_get()函數從JSON對象中取出對應的值,并使用json_is_xxx()函數判斷值的類型,最后再通過json_xxx_value()函數取出具體的值。其中,json_t為封裝JSON數據的結構體,json_error_t為記錄錯誤信息的結構體。

通過反序列化操作,我們可以方便地將C語言中的數據轉換為JSON格式,實現數據的傳輸和存儲。