JSON是一種輕巧的數據交換格式,支持復雜數據結構的表示。在使用C語言時,我們經常需要處理JSON數據,并將其保存到數據庫中。這篇文章將介紹如何使用C語言將JSON數據保存到數據庫中。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql.h> #include <jansson.h> int main() { // 初始化MySQL連接 MYSQL *conn = mysql_init(NULL); if (conn == NULL) { printf("mysql_init failed: %s\n", mysql_error(conn)); exit(1); } // 連接到數據庫 if (mysql_real_connect(conn, "localhost", "root", "123456", "mydb", 0, NULL, 0) == NULL) { printf("mysql_real_connect failed: %s\n", mysql_error(conn)); exit(1); } // 讀取JSON文件 FILE *json_file = fopen("data.json", "rb"); if (json_file == NULL) { perror("fopen failed"); exit(1); } fseek(json_file, 0, SEEK_END); long file_size = ftell(json_file); fseek(json_file, 0, SEEK_SET); char *json_data = (char *)malloc(file_size + 1); fread(json_data, 1, file_size, json_file); json_data[file_size] = '\0'; fclose(json_file); // 解析JSON字符串 json_error_t error; json_t *root = json_loads(json_data, 0, &error); if (!root) { printf("json_loads failed on line %d: %s\n", error.line, error.text); exit(1); } if (!json_is_array(root)) { printf("root is not an array\n"); exit(1); } // 遍歷JSON數組 size_t num_items = json_array_size(root); for (int i = 0; i < num_items; i++) { json_t *item = json_array_get(root, i); if (!json_is_object(item)) { printf("item at index %d is not an object\n", i); continue; } // 獲取JSON對象中的值 json_t *json_name = json_object_get(item, "name"); const char *name = json_string_value(json_name); if (name == NULL) { printf("name is not a string\n"); continue; } json_t *json_age = json_object_get(item, "age"); int age = json_integer_value(json_age); // 將值插入到MySQL數據庫中 char query[100]; sprintf(query, "INSERT INTO users (name, age) VALUES ('%s', %d)", name, age); if (mysql_query(conn, query)) { printf("mysql_query failed: %s\n", mysql_error(conn)); continue; } } // 釋放資源 json_decref(root); free(json_data); mysql_close(conn); return 0; }
以上代碼演示了如何使用C語言將JSON數據保存到MySQL數據庫中。其中,我們使用了mysql和jansson庫來連接MySQL數據庫和解析JSON字符串。我們遍歷JSON數組中的每一個對象,并獲取它們的值。然后,我們將這些值插入到MySQL數據庫中的users表中。