C語言作為一門底層語言,其類型系統是相對固定的,很難直接支持泛型操作。但是,在使用C語言編寫程序時,我們經常需要將不同類型的數據轉換為JSON格式的字符串,因此需要一種通用的方法來實現泛型轉換。
#include#include #include #include #define BUF_SIZE 1024 typedef struct { char* name; int age; } Person; char* person_to_json(Person* p) { json_t* root = json_object(); json_object_set_new(root, "name", json_string(p->name)); json_object_set_new(root, "age", json_integer(p->age)); char* json_str = json_dumps(root, 0); json_decref(root); return json_str; } int main() { Person p = {"Tom", 18}; char* json_str = person_to_json(&p); printf("%s\n", json_str); free(json_str); return 0; }
上面的代碼演示了如何將一個Person類型的結構體轉換為JSON格式的字符串。通過引入jansson庫,我們可以使用其提供的API將數據轉換為JSON對象,然后調用json_dumps()將其轉換為字符串。
當需要將其他類型的數據轉換為JSON格式時,可以通過類似的方法實現。但是,由于C語言沒有泛型類型,我們需要手動針對每種數據類型實現轉換函數。
char* int_to_json(int value) { json_t* root = json_integer(value); char* json_str = json_dumps(root, 0); json_decref(root); return json_str; } char* float_to_json(float value) { json_t* root = json_real(value); char* json_str = json_dumps(root, 0); json_decref(root); return json_str; } char* string_to_json(const char* value) { json_t* root = json_string(value); char* json_str = json_dumps(root, 0); json_decref(root); return json_str; }
雖然需要手動實現轉換函數,但是通過封裝和簡單的宏定義,我們可以使代碼更加簡潔易懂,例如:
#define TO_JSON(type, action) \\ char* type##_to_json(type value) { \\ action; \\ json_t* root = ...; \\ char* json_str = ...; \\ json_decref(root); \\ return json_str; \\ } TO_JSON(int, json_integer(value)) TO_JSON(float, json_real(value)) TO_JSON(string, json_string(value))
這樣,代碼可以更加通用、易于維護,實現了一定程度的泛型操作。
上一篇dict存成json文件
下一篇div json循環