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

c 實現(xiàn)json數(shù)據(jù)轉(zhuǎn)實體

呂致盈1年前8瀏覽0評論

在web開發(fā)中,json格式的數(shù)據(jù)已經(jīng)成為一種非常重要的傳輸格式。在前端和后端接口數(shù)據(jù)交互的過程中,前端一般會將json數(shù)據(jù)轉(zhuǎn)換為js對象,而后端則一般會將json數(shù)據(jù)轉(zhuǎn)換為實體對象。在C語言中,實現(xiàn)json數(shù)據(jù)轉(zhuǎn)實體是一種非常實用的技能。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jansson.h>
typedef struct {
int id;
char name[20];
int age;
} Person;
int parse_person(const char *json_str, Person *p) {
json_error_t error;
json_t *root;
root = json_loads(json_str, 0, &error);
if(!root) {
fprintf(stderr, "json error on line %d: %s\n", error.line, error.text);
return -1;
}
if(!json_is_object(root)) {
fprintf(stderr, "json error: root is not object\n");
return -1;
}
json_t *id_obj = json_object_get(root, "id");
json_t *name_obj = json_object_get(root, "name");
json_t *age_obj = json_object_get(root, "age");
if(!id_obj || !json_is_integer(id_obj)) {
fprintf(stderr, "json error: get id error\n");
return -1;
}
if(!name_obj || !json_is_string(name_obj)) {
fprintf(stderr, "json error: get name error\n");
return -1;
}
if(!age_obj || !json_is_integer(age_obj)) {
fprintf(stderr, "json error: get age error\n");
return -1;
}
p->id = json_integer_value(id_obj);
strcpy(p->name, json_string_value(name_obj));
p->age = json_integer_value(age_obj);
json_decref(root);
return 0;
}
int main() {
char json_str[] = "{\"id\": 123, \"name\": \"Tom\", \"age\": 20}";
Person p;
int ret = parse_person(json_str, &p);
if(ret == 0) {
printf("id=%d, name=%s, age=%d\n", p.id, p.name, p.age);
}
return 0;
}

在上面的代碼中,我們使用了jansson庫來解析json數(shù)據(jù)。通過json_loads函數(shù),我們將json數(shù)據(jù)解析成了一個json_t類型的對象。接著,我們通過json_object_get函數(shù)來獲取json對象中的id、name和age三個屬性,最后將屬性值賦給Person結(jié)構(gòu)體中對應(yīng)的成員變量。需要注意的是,在使用完json_t對象后,需要通過json_decref函數(shù)將其釋放。