Hey小伙伴们👋,今天来聊聊一个超有趣的话题——用C语言处理JSON文件!是不是听起来有点挑战?但别担心,我会一步步带你飞!🚀

我们得明白JSON文件是啥,它就是一种轻量级的数据交换格式,长得像这样:{"name":"John", "age":30},它让数据的读写变得简单,而且很多API都支持这种格式。

我们怎么用C语言来操作这种文件呢?答案就是使用第三方库,C语言本身并不支持解析JSON,所以我们需要借助一些外部的力量,这里,我会介绍一个非常流行的库——cJSON

步骤一:安装cJSON库

你需要在你的项目中集成cJSON库,这个库是开源的,你可以在GitHub上找到它,下载后,你需要在你的项目中包含它的头文件和源文件。

#include "cJSON.h"

步骤二:解析JSON文件

我们来写代码解析一个JSON文件,假设我们有一个名为data.json的文件,内容如下:

{
  "name": "Alice",
  "age": 25,
  "is_student": false
}

我们可以用以下代码来解析它:

FILE *fp = fopen("data.json", "r");
if (fp == NULL) {
    printf("Failed to open file
");
    return 1;
}
char *data = NULL;
size_t len = 0;
fread(data, 1, len, fp);
fclose(fp);
cJSON *json = cJSON_Parse(data);
if (json == NULL) {
    const char *error_ptr = cJSON_GetErrorPtr();
    if (error_ptr != NULL) {
        fprintf(stderr, "Error before: %s
", error_ptr);
    }
    cJSON_free(data);
    return 1;
}
const cJSON *name = cJSON_GetObjectItemCaseSensitive(json, "name");
const cJSON *age = cJSON_GetObjectItemCaseSensitive(json, "age");
const cJSON *is_student = cJSON_GetObjectItemCaseSensitive(json, "is_student");
if (cJSON_IsString(name) && (name->valuestring != NULL)) {
    printf("Name: %s
", name->valuestring);
}
if (cJSON_IsNumber(age)) {
    printf("Age: %d
", age->valueint);
}
if (cJSON_IsBool(is_student)) {
    printf("Is Student: %s
", is_student->valueint ? "Yes" : "No");
}
cJSON_Delete(json);
free(data);

这段代码首先打开文件,读取内容到内存中,然后使用cJSON_Parse解析JSON字符串,之后,我们可以通过cJSON_GetObjectItemCaseSensitive来获取特定的值,并检查它们的类型。

步骤三:创建和写入JSON文件

处理完读取,我们也可以创建JSON并写入文件,下面是一个简单的例子:

cJSON *json = cJSON_CreateObject();
cJSON_AddStringToObject(json, "name", "Bob");
cJSON_AddNumberToObject(json, "age", 30);
cJSON_AddBoolToObject(json, "is_student", true);
char *json_string = cJSON_Print(json);
FILE *out = fopen("output.json", "w");
if (out == NULL) {
    fprintf(stderr, "Error writing to file
");
} else {
    fputs(json_string, out);
    fclose(out);
    free(json_string);
}
cJSON_Delete(json);

这段代码创建了一个JSON对象,添加了一些字段,然后将它转换成字符串并写入到文件中。

就这样,我们已经用C语言操作了JSON文件!是不是挺酷的?😎 记得,处理JSON时,错误检查非常重要,因为JSON格式很容易出错,希望这个小教程能帮助你开始用C语言处理JSON文件,下次见!👋🌟