對于C語言開發者而言,Json轉實體對象是一項常見的任務。為了實現這一目標,可以借助第三方庫,例如Jansson。以下是示例代碼:
#include <jansson.h> #include <stdio.h> #include <stdlib.h> typedef struct { int id; char *name; char *email; int active; }user; user* json_to_user(json_t *json){ if(!json_is_object(json)) return NULL; user* u = (user*)malloc(sizeof(user)); json_t *id = json_object_get(json, "id"); if(!json_is_integer(id)) return NULL; u->id = json_integer_value(id); json_t *name = json_object_get(json, "name"); if(!json_is_string(name)) return NULL; u->name = (char *)json_string_value(name); json_t *email = json_object_get(json, "email"); if(!json_is_string(email)) return NULL; u->email = (char *)json_string_value(email); json_t *active = json_object_get(json, "active"); if(!json_is_boolean(active) && !json_is_null(active)) return NULL; u->active = json_is_boolean(active) ? json_boolean_value(active) : 0; return u; } int main() { char *json_str = "{" "\"id\":1," "\"name\":\"John Smith\"," "\"email\":\"john.smith@example.com\"," "\"active\":true" "}"; json_error_t error; json_t *root = json_loads(json_str, JSON_ENSURE_ASCII, &error); user *u = json_to_user(root); printf("%d, %s, %s, %d\n", u->id, u->name, u->email, u->active); return 0; }
在該示例代碼中,定義了一個名為user的結構體,其中包含了id、name、email和active四個成員變量。接著再定義一個json_to_user函數,該函數的參數為一個json_t類型的指針,返回一個指向user類型的指針。在函數內部,通過使用json_object_get函數和json_is_xxx系列函數,依次獲取json對象中的數據,并存儲到user結構體中。最后在main函數中,先使用json_loads函數將字符串轉換成json_t類型,再調用json_to_user函數,傳遞json對象,最終打印出user結構體的成員變量值。
總體而言,通過使用第三方庫,開發者可以快速實現Json轉實體對象的過程,在實際開發工作中大大提升了開發效率。
上一篇vue js 繼承