C語言是一門強(qiáng)類型語言,沒有像其他現(xiàn)代語言一樣的內(nèi)置Json類型。但是,我們可以使用第三方庫來解析Json數(shù)據(jù)。在本文中,我們將使用cJSON庫來獲取Json數(shù)據(jù)并將其轉(zhuǎn)換成對(duì)象數(shù)組。
首先,我們需要在我們的項(xiàng)目中安裝cJSON庫。你可以選擇手動(dòng)下載源碼并導(dǎo)入你的項(xiàng)目中,但是更簡單的方法是使用包管理工具如Brew安裝。對(duì)于使用Brew的用戶,你可以在終端中輸入以下命令進(jìn)行安裝:
brew install cJSON
接下來,我們需要讀取Json文件。下面是一個(gè)簡單的示例函數(shù):
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "cJSON.h" char *read_file(const char *filename) { FILE *file = fopen(filename, "r"); if (file) { char *content = NULL; long length = 0; fseek(file, 0, SEEK_END); length = ftell(file); fseek(file, 0, SEEK_SET); content = calloc(1, length + 1); if (content) { fread(content, 1, length, file); } fclose(file); return content; } return NULL; }
該函數(shù)讀取文件并返回文件內(nèi)容的字符串。接下來,我們可以使用cJSON庫將字符串解析成Json對(duì)象:
int main() { // 讀取Json文件 char *json_str = read_file("./example.json"); // 解析Json字符串 cJSON *root = cJSON_Parse(json_str); // 獲取Json中的數(shù)組 cJSON *messages = cJSON_GetObjectItem(root, "messages"); // 打印Json中messages數(shù)組的長度 printf("total messages: %d\n", cJSON_GetArraySize(messages)); // 遍歷數(shù)組并打印每個(gè)對(duì)象的內(nèi)容 int i = 0; for (i = 0; i< cJSON_GetArraySize(messages); i++) { cJSON *message = cJSON_GetArrayItem(messages, i); // 獲取message對(duì)象的字段值 char *id = cJSON_GetObjectItem(message, "id")->valuestring; char *text = cJSON_GetObjectItem(message, "text")->valuestring; printf("message %d: %s - %s\n", i+1, id, text); } cJSON_Delete(root); free(json_str); return 0; }
上面的代碼解析了一個(gè)包含多個(gè)消息的Json文件,輸出了每個(gè)消息的id和text字段。你可以根據(jù)自己的需要修改這個(gè)示例代碼,例如將解析后的對(duì)象數(shù)組存儲(chǔ)到數(shù)據(jù)庫中,或者將其用于構(gòu)建API返回的Json數(shù)據(jù)。