在C語言的開發中,我們通常會使用JSON格式來表示數據,它可以方便地將一個對象序列化成一個字符串,在網絡傳輸中傳遞數據。但是,JSON字符串不方便直接操作,我們需要將其轉換為對象格式來進行操作。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <ctype.h> #include <jansson.h> typedef struct { int id; char name[100]; bool gender; } Person; int main() { const char* json_str = "{\"id\": 1, \"name\": \"Tom\", \"gender\": true}"; json_t* root = NULL; json_error_t error; root = json_loads(json_str, 0, &error); if (!root) { printf("JSON解析失敗!%s\n", error.text); return -1; } Person person; json_t* id = json_object_get(root, "id"); if (!json_is_integer(id)) { printf("解析id失敗!\n"); return -1; } person.id = json_integer_value(id); json_t* name = json_object_get(root, "name"); if (!json_is_string(name)) { printf("解析name失??!\n"); return -1; } strcpy(person.name, json_string_value(name)); json_t* gender = json_object_get(root, "gender"); if (!json_is_boolean(gender)) { printf("解析gender失敗!\n"); return -1; } person.gender = json_is_true(gender); json_decref(root); printf("Person==>%d, %s, %s\n", person.id, person.name, person.gender ? "男" : "女"); return 0; }
在這個例子中,我們首先定義了一個Person結構體,然后使用json_loads函數將JSON字符串解析為一個json_t*類型的對象root。之后,我們通過調用json_object_get函數和json_is_XXX函數來獲取和解析JSON中的數據,并將其存儲到Person結構體中。最后,我們調用json_decref函數釋放root對象。
通過這種方法,我們可以輕松地將JSON格式轉換為C語言中的對象格式,并進行操作。在實際開發中,我們還可以通過擴展這個例子,使用循環來解析JSON數組、使用遞歸來解析嵌套的JSON對象等等。