在C語言中,有時我們需要將一個結構體或對象序列化為JSON字符串進行傳輸或保存。JSON是一種輕量級的數據交換格式,可以用于不同語言之間的數據傳輸,因此將對象封裝為JSON字符串對于C語言的開發十分有用。
#include <stdlib.h> #include <stdio.h> #include <string.h> #include <jansson.h> typedef struct { char name[20]; int age; char gender[10]; } Person; char *person_to_json(Person *p) { json_t *root = json_pack("{s:s, s:i, s:s}", "name", p->name, "age", p->age, "gender", p->gender); if (!root) { fprintf(stderr, "error: unable to create json object\n"); return NULL; } char *json_str = json_dumps(root, JSON_INDENT(4) | JSON_PRESERVE_ORDER); json_decref(root); return json_str; } Person *person_from_json(const char *json_str) { 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); return NULL; } Person *p = (Person*)malloc(sizeof(Person)); if (!p) { fprintf(stderr, "error: unable to allocate memory\n"); json_decref(root); return NULL; } json_t *name = json_object_get(root, "name"); if (!json_is_string(name)) { fprintf(stderr, "error: 'name' is not a string\n"); free(p); json_decref(root); return NULL; } strcpy(p->name, json_string_value(name)); json_t *age = json_object_get(root, "age"); if (!json_is_integer(age)) { fprintf(stderr, "error: 'age' is not an integer\n"); free(p); json_decref(root); return NULL; } p->age = json_integer_value(age); json_t *gender = json_object_get(root, "gender"); if (!json_is_string(gender)) { fprintf(stderr, "error: 'gender' is not a string\n"); free(p); json_decref(root); return NULL; } strcpy(p->gender, json_string_value(gender)); json_decref(root); return p; } int main() { Person p1 = {"Lucy", 25, "female"}; char *json_str = person_to_json(&p1); printf("JSON string: %s\n", json_str); Person *p2 = person_from_json(json_str); if (p2) { printf("name=%s, age=%d, gender=%s\n", p2->name, p2->age, p2->gender); free(p2); } free(json_str); return 0; }
上面的代碼演示了如何將一個Person對象封裝為JSON字符串,并通過JSON字符串重新構造一個Person對象。我們首先用C語言的結構體定義了一個Person對象,包含姓名、年齡、性別三個屬性。person_to_json函數將一個Person對象轉換為JSON字符串,person_from_json函數將一個JSON字符串轉換為Person對象。程序最后輸出了Person對象的信息。
上一篇easyui返回json
下一篇Python 池化層代碼