c json 配置是一種非常常見的配置文件格式,它使用 json 格式來存儲(chǔ)配置信息,具有靈活、易讀、易維護(hù)等特點(diǎn)。在 c 語言中,我們可以使用第三方庫 cJSON 來解析和生成 json 格式的配置文件。
在使用 cJSON 之前,我們需要先下載它的源碼,并將其編譯成靜態(tài)庫文件。編譯好的靜態(tài)庫文件可以鏈接到我們的項(xiàng)目中進(jìn)行使用。
$ 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
編譯完成后,我們可以將生成的靜態(tài)庫文件(libcjson.a)復(fù)制到我們的項(xiàng)目中,并在編譯時(shí)鏈接。
接下來,讓我們來看一下如何使用 cJSON 來解析 json 格式的配置文件。假設(shè)我們有一個(gè)名為 config.json 的配置文件,它的內(nèi)容如下:
{ "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" } }
我們可以使用以下代碼來解析這個(gè)配置文件:
#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; }
運(yùn)行程序后,我們可以看到以下輸出結(jié)果:
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"}
在這個(gè)例子中,我們首先打開 config.json 配置文件,并將其讀入到 buffer 中。然后,我們使用 cJSON_Parse 函數(shù)將 buffer 解析成 cJSON 結(jié)構(gòu)體。接著,我們使用 cJSON_GetObjectItem 函數(shù)獲取 json 對象中的各個(gè)字段,并使用 cJSON_GetStringValue 和 cJSON_Print 函數(shù)將其轉(zhuǎn)換成字符串。
最后,我們打印出了各個(gè)字段的值,并通過 cJSON_Delete 函數(shù)釋放了 cJSON 結(jié)構(gòu)體的內(nèi)存。