C语言读取data.json文件并存入MySQL数据库小案例(推荐)

 更新时间:2024年10月12日 09:49:02   作者:etsuyou  
本文介绍如何使用C语言结合cJSON库读取JSON文件,并将数据存储到MySQL数据库中,示例代码包括创建MySQL表的SQL语句和C语言代码,以及如何编译和运行程序,确保已安装必要的库以支持程序运行

本地有一个data.json文件

data.json

[
    {
        "id": 1,
        "name": "Alice",
        "age": 30
    },
    {
        "id": 2,
        "name": "Bob",
        "age": 25
    }
]

要将 data.json 文件中的数据存储到 MySQL 数据库中,首先需要创建一个相应的数据库表。然后,你可以使用 C 语言和 cJSON 库来读取 JSON 文件并将数据插入到数据库中。

1. 创建 MySQL 表

首先,在 MySQL 中创建一个表来存储数据。可以使用以下 SQL 语句:

CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT
);

2. C 语言代码示例

以下是一个完整的 C 语言示例,使用 cJSON 库读取 data.json 文件并将数据插入到 MySQL 数据库中。

依赖项

确保你已经安装了以下库:

  • MySQL C API
  • cJSON

代码示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
#include "cJSON.h"
// MySQL 配置
#define DB_HOST "xxx.xxx.xxx.xxx"
#define DB_USER "root"
#define DB_PASSWORD "xxxxxx"
#define DB_NAME "xxxxx"
void insert_user(MYSQL *conn, int id, const char *name, int age) {
    char query[256];
    snprintf(query, sizeof(query), "INSERT INTO users (id, name, age) VALUES (%d, '%s', %d)", id, name, age);
    if (mysql_query(conn, query)) {
        fprintf(stderr, "INSERT failed: %s\n", mysql_error(conn));
    }
}
int main() {
    // MySQL 连接
    MYSQL *conn;
    conn = mysql_init(NULL);
    if (conn == NULL) {
        fprintf(stderr, "mysql_init() failed\n");
        return EXIT_FAILURE;
    }
    if (mysql_real_connect(conn, DB_HOST, DB_USER, DB_PASSWORD, DB_NAME, 0, NULL, 0) == NULL) {
        fprintf(stderr, "mysql_real_connect() failed\n");
        mysql_close(conn);
        return EXIT_FAILURE;
    }
    // 读取 JSON 文件
    FILE *file = fopen("data.json", "r");
    if (!file) {
        perror("Could not open file");
        mysql_close(conn);
        return EXIT_FAILURE;
    }
    fseek(file, 0, SEEK_END);
    long length = ftell(file);
    fseek(file, 0, SEEK_SET);
    char *data = malloc(length);
    fread(data, 1, length, file);
    fclose(file);
    // 解析 JSON
    cJSON *json = cJSON_Parse(data);
    if (json == NULL) {
        fprintf(stderr, "cJSON_Parse failed\n");
        free(data);
        mysql_close(conn);
        return EXIT_FAILURE;
    }
    // 遍历 JSON 数组并插入数据
    cJSON *user;
    cJSON_ArrayForEach(user, json) {
        int id = cJSON_GetObjectItem(user, "id")->valueint;
        const char *name = cJSON_GetObjectItem(user, "name")->valuestring;
        int age = cJSON_GetObjectItem(user, "age")->valueint;
        insert_user(conn, id, name, age);
    }
    // 清理
    cJSON_Delete(json);
    free(data);
    mysql_close(conn);
    return EXIT_SUCCESS;
}

3. 编译和运行

新建一个makefile文件:

# 定义变量
CC = gcc
CFLAGS = -Wall -g
LIBS = -lm -lmysqlclient  # 添加 MySQL 客户端库
TARGET = json_to_mysql
SRC = main.c cJSON.c
OBJ = $(SRC:.c=.o)
# 默认目标
all: $(TARGET)
# 构建目标
$(TARGET): $(OBJ)
	$(CC) $(CFLAGS) -o $@ $^ $(LIBS)
# 编译 .c 文件为 .o 文件
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@
# 清理目标
clean:
	rm -f $(TARGET) $(OBJ)
# 伪目标
.PHONY: all clean

输入make编译:

运行

到此这篇关于C语言读取data.json文件并存入MySQL数据库小案例的文章就介绍到这了,更多相关C语言读取data.json文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • windows下vscode使用cmake的方法

    windows下vscode使用cmake的方法

    这篇文章主要介绍了windows下vscode使用cmake的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C C++算法题解LeetCode1408数组中的字符串匹配

    C C++算法题解LeetCode1408数组中的字符串匹配

    这篇文章主要为大家介绍了C C++算法题解LeetCode1408数组中的字符串匹配示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 在C++中使用HP-Socket

    在C++中使用HP-Socket

    这篇文章主要介绍了C++中简单使用HP-Socket,HP-Socket 是一套通用的高性能 TCP/UDP /HTTP 通信 框架 ,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP /HTTP 通信系统,下面来看看更具体的介绍吧
    2021-11-11
  • C++深入分析STL中map容器的使用

    C++深入分析STL中map容器的使用

    map在编程中是经常使用的一个容器,本文来讲解一下STL中的map,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • C++中的代理模式实现代码

    C++中的代理模式实现代码

    本文介绍了C++中的STL算法,分为非修改序列算法和修改序列算法两大类,涵盖了如find、count、equal、mismatch、all_of、any_of、none_of等非修改序列算法,还介绍了排序算法、堆算法、最小/最大值算法、数值算法等,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • 深入理解strcpy与memcpy的区别

    深入理解strcpy与memcpy的区别

    本篇文章是对strcpy与memcpy的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C++实现景区旅游信息管理系统

    C++实现景区旅游信息管理系统

    这篇文章主要为大家详细介绍了C++实现景区旅游信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 详解C++中移动语义的概念与使用

    详解C++中移动语义的概念与使用

    本篇文章主要为大家详细介绍了C++中移动语义的相关知识,小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2023-06-06
  • 解决scanf_s输入%d%c%d格式错误的问题

    解决scanf_s输入%d%c%d格式错误的问题

    这篇文章主要介绍了解决scanf_s输入%d%c%d格式错误的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • VSCode插件开发全攻略之跳转到定义、自动补全、悬停提示功能

    VSCode插件开发全攻略之跳转到定义、自动补全、悬停提示功能

    这篇文章主要介绍了VSCode插件开发全攻略之跳转到定义、自动补全、悬停提示,需要的朋友可以参考下
    2020-05-05

最新评论