c json 配置是一种非常常见的配置文件格式,它使用 json 格式来存储配置信息,具有灵活、易读、易维护等特点。在 c 语言中,我们可以使用第三方库 cJSON 来解析和生成 json 格式的配置文件。
在使用 cJSON 之前,我们需要先下载它的源码,并将其编译成静态库文件。编译好的静态库文件可以链接到我们的项目中进行使用。
$ wget https://github.com/DaveGamble/cJSON/archive/v1.7.14.tar.gz $ tar zxvf v1.7.14.tar.gz $ cd cJSON-1.7.14 $ mkdir build && cd build $ cmake .. && make
编译完成后,我们可以将生成的静态库文件(libcjson.a)复制到我们的项目中,并在编译时链接。
接下来,让我们来看一下如何使用 cJSON 来解析 json 格式的配置文件。假设我们有一个名为 config.json 的配置文件,它的内容如下:
{ "name": "cJSON Config", "version": "1.0.0", "author": { "name": "John Doe", "email": "johndoe@example.com" }, "database": { "host": "localhost", "port": 3306, "username": "root", "password": "password", "database": "mydb" } }
我们可以使用以下代码来解析这个配置文件:
#include#include #include #include "cJSON.h" int main() { char *buffer; FILE *fp; long length; fp = fopen("config.json", "rb"); if (fp) { fseek(fp, 0, SEEK_END); length = ftell(fp); fseek(fp, 0, SEEK_SET); buffer = malloc(length + 1); if (buffer) { fread(buffer, 1, length, fp); buffer[length] = '\0'; cJSON *root = cJSON_Parse(buffer); if (root) { cJSON *name = cJSON_GetObjectItem(root, "name"); cJSON *version = cJSON_GetObjectItem(root, "version"); cJSON *author = cJSON_GetObjectItem(root, "author"); cJSON *database = cJSON_GetObjectItem(root, "database"); char *name_str = cJSON_GetStringValue(name); char *version_str = cJSON_GetStringValue(version); char *author_str = cJSON_Print(author); char *database_str = cJSON_Print(database); printf("name: %s\n", name_str); printf("version: %s\n", version_str); printf("author: %s\n", author_str); printf("database: %s\n", database_str); free(name_str); free(version_str); free(author_str); free(database_str); cJSON_Delete(root); } free(buffer); } fclose(fp); } return 0; }
运行程序后,我们可以看到以下输出结果:
name: cJSON Config version: 1.0.0 author: {"name":"John Doe","email":"johndoe@example.com"} database: {"host":"localhost","port":3306,"username":"root","password":"password","database":"mydb"}
在这个例子中,我们首先打开 config.json 配置文件,并将其读入到 buffer 中。然后,我们使用 cJSON_Parse 函数将 buffer 解析成 cJSON 结构体。接着,我们使用 cJSON_GetObjectItem 函数获取 json 对象中的各个字段,并使用 cJSON_GetStringValue 和 cJSON_Print 函数将其转换成字符串。
最后,我们打印出了各个字段的值,并通过 cJSON_Delete 函数释放了 cJSON 结构体的内存。