JSON和CSV都是常用的數(shù)據(jù)格式,它們可以用于在不同的平臺(tái)和操作系統(tǒng)之間輕松地傳遞數(shù)據(jù)。在許多情況下,需要將JSON數(shù)據(jù)轉(zhuǎn)換為CSV格式,以便能夠在電子表格程序(如Microsoft Excel或Google Sheets)中輕松地查看和處理數(shù)據(jù)。C語(yǔ)言中提供了許多庫(kù)可以實(shí)現(xiàn)JSON和CSV格式之間的轉(zhuǎn)換。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <jansson.h> void json_to_csv(json_t *root, FILE *csv_file) { json_t *elem; // 獲取json數(shù)組元素?cái)?shù)量 size_t array_size = json_array_size(root); // 輸出CSV文件的標(biāo)題行 fprintf(csv_file, "id,name,age,email\n"); for (size_t i = 0; i< array_size; i++) { elem = json_array_get(root, i); // 獲取JSON對(duì)象的鍵值對(duì) const char *id = json_string_value(json_object_get(elem, "id")); const char *name = json_string_value(json_object_get(elem, "name")); int age = json_integer_value(json_object_get(elem, "age")); const char *email = json_string_value(json_object_get(elem, "email")); // 將元素寫入CSV文件 fprintf(csv_file, "%s,%s,%d,%s\n", id, name, age, email); } } int main() { // 從JSON文件中讀取數(shù)據(jù) FILE *json_file = fopen("data.json", "r"); json_error_t json_error; json_t *root = json_loadf(json_file, 0, &json_error); fclose(json_file); if (!root) { fprintf(stderr, "Error parsing JSON: %s\n", json_error.text); return 1; } // 將數(shù)據(jù)寫入CSV文件 FILE *csv_file = fopen("data.csv", "w"); if (!csv_file) { fprintf(stderr, "Error creating CSV file\n"); return 1; } json_to_csv(root, csv_file); fclose(csv_file); json_decref(root); return 0; }
上述代碼段演示了如何將JSON數(shù)據(jù)轉(zhuǎn)換為CSV文件。通過(guò)使用json_t結(jié)構(gòu)以及json_object_get和json_array_get函數(shù),可以將JSON對(duì)象和數(shù)組轉(zhuǎn)換為C語(yǔ)言中的數(shù)據(jù)類型。這些數(shù)據(jù)可以使用fprintf函數(shù)按照CSV的格式寫入文件。在這個(gè)例子中,我們將數(shù)據(jù)寫入名為data.csv的文件中。