C和csv都是常用的數據格式,它們被廣泛應用于數據庫、數據處理和數據傳輸。然而,這兩種格式往往與Web應用程序的數據交互不兼容,因為Web應用程序通常采用JSON格式。因此,將CSV格式轉換為JSON格式是非常重要的。下面是一個使用C語言將CSV文件轉換為JSON格式的例子。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LINE_LENGTH 1000 #define MAX_FIELD_LENGTH 100 int main(int argc, char **argv) { // 轉換文件名 char *csv_file_name; char *json_file_name; if (argc == 3) { csv_file_name = argv[1]; json_file_name = argv[2]; } else { printf("Usage: %s <csv_file> <json_file>\n", argv[0]); return 1; } // 讀取CSV文件 FILE *csv_file = fopen(csv_file_name, "r"); if (!csv_file) { printf("Failed to open CSV file: %s\n", csv_file_name); return 1; } char line[MAX_LINE_LENGTH]; char *field[MAX_FIELD_LENGTH]; int field_count; fgets(line, MAX_LINE_LENGTH, csv_file); //讀取第一行,即標題行 field_count = 0; field[field_count++] = strtok(line, ","); while ((field[field_count++] = strtok(NULL, ","))) {} // 生成JSON FILE *json_file = fopen(json_file_name, "w"); if (!json_file) { printf("Failed to create JSON file: %s\n", json_file_name); fclose(csv_file); return 1; } fprintf(json_file, "[\n"); while (fgets(line, MAX_LINE_LENGTH, csv_file)) { field_count = 0; field[field_count++] = strtok(line, ","); while ((field[field_count++] = strtok(NULL, ","))) {} fprintf(json_file, " {\n"); for (int i = 0; i < field_count-1; i++) { fprintf(json_file, " \"%s\":\"%s\",\n", field[i], field[i+1]); i++; } fprintf(json_file, " },\n"); } fseek(json_file, -2, SEEK_CUR); fprintf(json_file, "\n]\n"); fclose(csv_file); fclose(json_file); return 0; }
在這個例子中,我們首先從命令行中獲取兩個文件名,一個是要轉換的CSV文件,另一個是要輸出JSON數據的文件。然后,我們打開CSV文件,讀取第一行(即標題行),以確定每個字段的名稱。接下來,我們使用fgets函數對CSV文件的每一行進行解析。我們使用strtok函數將每行分割成一個個逗號分隔的字段,然后將這些字段與標題行中的字段匹配。一旦匹配成功,我們將字段寫入JSON文件。最后,我們在JSON文件最后一個對象后移除逗號,并在文件的開頭和結尾添加中括號,以形成有效的JSON數組格式。
上一篇vue video
下一篇hive 導出json