在C語言中,結構體是一種自定義的數據類型,它可以包含多個不同類型的數據成員。而JSON(JavaScript Object Notation)則是一種輕量級的數據交換格式,常用于Web應用中前后端之間的數據傳輸。在處理數據時,C程序經常需要將結構體轉換為JSON格式,或者將JSON格式轉換為結構體。
要將結構體轉換為JSON格式,可以使用第三方庫,比如常用的JSON-C庫。以下是一個示例代碼:
#include <stdio.h> #include <json-c/json.h> struct book { char title[50]; char author[50]; int pages; }; int main() { struct book mybook = {"The Catcher in the Rye", "J.D. Salinger", 277}; struct json_object *json_obj = json_object_new_object(); json_object_object_add(json_obj, "title", json_object_new_string(mybook.title)); json_object_object_add(json_obj, "author", json_object_new_string(mybook.author)); json_object_object_add(json_obj, "pages", json_object_new_int(mybook.pages)); printf("%s\n", json_object_to_json_string(json_obj)); return 0; }
上述代碼定義了一個book結構體,并創建了一個JSON對象json_obj。使用json_object_object_add()函數將結構體中的數據添加到JSON對象中,最后使用json_object_to_json_string()函數將JSON對象轉換為JSON格式字符串并輸出。
另外,要將JSON格式字符串轉換為結構體,也可以使用JSON-C庫提供的函數。下面是一個示例代碼:
#include <stdio.h> #include <json-c/json.h> struct book { char title[50]; char author[50]; int pages; }; int main() { char *json_str = "{\"title\":\"The Catcher in the Rye\",\"author\":\"J.D. Salinger\",\"pages\":277}"; struct json_object *json_obj = json_tokener_parse(json_str); struct json_object *title_obj, *author_obj, *pages_obj; json_object_object_get_ex(json_obj, "title", &title_obj); json_object_object_get_ex(json_obj, "author", &author_obj); json_object_object_get_ex(json_obj, "pages", &pages_obj); struct book mybook = { .title = json_object_get_string(title_obj), .author = json_object_get_string(author_obj), .pages = json_object_get_int(pages_obj) }; printf("%s\n", mybook.title); printf("%s\n", mybook.author); printf("%d\n", mybook.pages); return 0; }
以上代碼中,首先定義了一個book結構體,然后將JSON格式字符串轉換為JSON對象,并通過json_object_object_get_ex()函數獲取各個數據成員的JSON對象。最后通過json_object_get_string()和json_object_get_int()函數將JSON對象中的數據轉換為結構體中的對應類型。