欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

c 對象封裝成json

李中冰1年前6瀏覽0評論

在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對象的信息。