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格式,實現數據的傳輸和存儲。