色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c 實現json封裝實例

李中冰2年前9瀏覽0評論

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,易于閱讀和編寫,被廣泛應用于Web服務端和客戶端之間的數據傳輸。C語言也可以通過一些庫,實現JSON的封裝和解析。

以下是一個C語言實現JSON封裝的示例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define JSON_OBJECT_SIZE 100
typedef enum {
JSON_STRING,
JSON_OBJECT
} json_type;
typedef struct {
json_type type;
char *key;
union {
char *val_str;
struct json_obj *val_obj;
} val;
} json_obj;
json_obj *json_new_object() {
json_obj *obj = (json_obj *) malloc(sizeof(json_obj) * JSON_OBJECT_SIZE);
obj[0].type = JSON_OBJECT;
obj[0].key = NULL;
obj[0].val.val_obj = NULL;
return obj;
}
void json_add_str(json_obj *obj, char *key, char *val) {
obj->type = JSON_STRING;
obj->key = key;
obj->val.val_str = val;
}
char *json_as_str(json_obj *obj) {
char *buf = (char *) malloc(sizeof(char) * 1024);
if (obj->type == JSON_STRING) {
sprintf(buf, "\"%s\":\"%s\"", obj->key, obj->val.val_str);
} else {
json_obj *val = obj->val.val_obj;
int len = sprintf(buf, "{");
while (val) {
len += sprintf(buf + len, "\"%s\":%s", val->key, json_as_str(val));
if (val->val.val_obj) strcat(buf, ",");
val++;
}
strcat(buf, "}");
}
return buf;
}
int main() {
json_obj *obj = json_new_object();
json_add_str(obj + 1, "name", "Tom");
json_add_str(obj + 2, "age", "21");
json_obj *skill_arr = json_new_object();
json_add_str(skill_arr + 1, "skill1", "Python");
json_add_str(skill_arr + 2, "skill2", "Java");
json_obj *skill_obj = json_new_object();
json_add_str(skill_obj + 1, "skills", json_as_str(skill_arr + 1));
json_add_str(obj + 3, "skill", json_as_str(skill_obj + 1));
char *json_str = json_as_str(obj + 1);
printf("%s", json_str);
free(obj);
free(skill_arr);
free(skill_obj);
free(json_str);
return 0;
}

此示例中,使用json_obj結構體封裝JSON對象, json_new_object方法創建一個新的JSON對象;json_add_str將字符串類型的key和val添加到JSON對象中; json_as_str將JSON對象轉換為字符串類型并返回。

本示例只封裝了字符串類型的對象,如果同學們需要封裝更多類型的對象,可以自行擴展。