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對象轉換為字符串類型并返回。
本示例只封裝了字符串類型的對象,如果同學們需要封裝更多類型的對象,可以自行擴展。