JSON是一種輕量級的數據交換格式,常用于前后端的數據傳輸和存儲。C語言中沒有內置的JSON數據類型,但可以使用第三方庫來解析和操作JSON數據。
在C語言中,可以使用preprocessor定義一個JSON數據結構:
typedef struct { enum { JSON_STRING, JSON_NUMBER, JSON_OBJECT } type; union { char *str; double num; struct { char **keys; struct json_t **values; int num_of_values; } obj; } data; } json_t;
該數據結構包含三種類型的數據:字符串、數字、和JSON對象。JSON對象具有鍵-值對的結構。定義這個數據結構后,就可以使用C語言中的指針和內存操作函數來構建和操作JSON數據。
以下是一個簡單的例子,在C語言中直接將JSON字符串轉換為JSON對象,并獲取其中的鍵值:
#include "json.h" int main() { char *json_str = "{ \"name\": \"John\", \"age\": 30 }"; json_t *obj = json_parse(json_str); char *name = json_get_string(obj, "name"); int age = json_get_num(obj, "age"); printf("Name: %s, Age: %d\n", name, age); json_free(obj); return 0; }
在這個例子中,字符串"{ \"name\": \"John\", \"age\": 30 }"被解析為JSON對象,并且可以通過json_get_string和json_get_num函數來獲取其中的值。
再看一個例子,在C語言中直接構建一個復雜的JSON對象:
#include "json.h" int main() { json_t *obj = json_new_object(); json_add_string(obj, "name", "John"); json_add_num(obj, "age", 30); json_t *address = json_new_object(); json_add_string(address, "street", "123 Main St."); json_add_string(address, "city", "Anytown"); json_add_string(address, "state", "CA"); json_add_object(obj, "address", address); json_print(obj); json_free(obj); return 0; }
在這個例子中,使用json_new_object函數創建一個空的JSON對象,并通過json_add_*函數向其中添加鍵值對。另外,通過json_add_object函數可以向JSON對象中添加另一個JSON對象。最后,使用json_print函數將JSON對象轉換為字符串并打印出來。
總之,雖然C語言沒有內置的JSON數據類型,但通過使用第三方庫和一些內存操作技巧,我們可以在C程序中直接操作JSON數據。