在 C 語言中,我們經常會使用 JSON 格式來傳遞數據。但是 JSON 格式的數據是以字符串的形式表示的,而我們在 C 語言中使用的是類對象,因此需要將 JSON 對象轉換為類對象。在下面的代碼示例中,我們將介紹如何使用 C 語言將 JSON 對象轉換為類對象。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> typedef struct { int id; char name[128]; float score; } Student; void json_to_student(const char* json_str, Student* student) { json_t* root; json_error_t error; root = json_loads(json_str, 0, &error); if (!root) { fprintf(stderr, "Error: on line %d: %s\n", error.line, error.text); exit(1); } json_t* id_obj = json_object_get(root, "id"); if (id_obj) { student->id = json_integer_value(id_obj); } json_t* name_obj = json_object_get(root, "name"); if (name_obj) { strncpy(student->name, json_string_value(name_obj), 128); } json_t* score_obj = json_object_get(root, "score"); if (score_obj) { student->score = json_real_value(score_obj); } json_decref(root); } int main() { const char* json_str = "{\"id\": 1, \"name\": \"Peter\", \"score\": 80.5}"; Student student; json_to_student(json_str, &student); printf("id: %d\n", student.id); printf("name: %s\n", student.name); printf("score: %f\n", student.score); return 0; }
在上面的代碼中,我們首先定義了一個 Student 結構體,用于保存學生的信息。然后我們定義了一個 json_to_student 函數,用于將 JSON 對象轉換為類對象。
在 json_to_student 函數中,我們首先使用 json_loads 函數將 JSON 字符串解析成 json_t 對象。然后我們使用 json_object_get 函數分別獲取 id、name 和 score 字段的值,并將其保存到 Student 結構體對應的字段中。最后我們使用 json_decref 函數釋放 json_t 對象。
在 main 函數中,我們調用 json_to_student 函數將 JSON 字符串轉換為一個 Student 對象,并輸出其字段的值。