JSON(JavaScript對象標記)是一種輕量級的數據交換格式,它易于閱讀和理解,同時易于使用。在C語言中,我們可以使用多種庫來處理JSON文件,如json-c、jansson、cJSON等。本文將介紹一個基于C語言的cJSON庫的使用方法。
首先,我們需要下載并導入cJSON的頭文件。可以從Github或cJSON官網上下載cJSON庫。
#include "cJSON.h"
接下來,我們將學習如何讀取一個JSON文件并提取其中的數據。
假設我們有一個名為data.json的JSON文件,其中包含以下數據:
{ "Name": "Alice", "Age": 25, "ID": "001", "Hobby": ["reading", "travelling", "music"], "Address": { "Country": "China", "Province": "Guangdong", "City": "Shenzhen" } }
我們首先需要將該JSON文件讀入內存中,然后進行解析。
// 讀取JSON文件 FILE* fp = fopen("data.json", "rb"); if (!fp) { printf("Failed to open file\n"); return 1; } // 獲取文件大小 fseek(fp, 0, SEEK_END); int size = ftell(fp); rewind(fp); // 讀取文件內容 char* json_data = (char*) malloc(sizeof(char) * (size + 1)); fread(json_data, 1, size, fp); fclose(fp); // 解析JSON數據 cJSON* root = cJSON_Parse(json_data); if (root == NULL) { printf("Failed to parse JSON data\n"); return 1; } // 釋放內存 free(json_data);
解析完成后,我們可以使用cJSON庫提供的函數來訪問JSON中的數據。
例如,要訪問該JSON中的Name數據,我們可以使用cJSON_GetObjectItem函數來獲取Name鍵對應的值:
cJSON* name_obj = cJSON_GetObjectItem(root, "Name"); char* name = cJSON_GetStringValue(name_obj); printf("Name: %s\n", name);
類似地,我們可以獲取Age、Hobby、Address等數據。需要注意的是,Hobby是一個數組類型,我們可以使用cJSON_GetArrayItem函數逐一獲取其元素:
cJSON* hobby_array = cJSON_GetObjectItem(root, "Hobby"); int hobby_count = cJSON_GetArraySize(hobby_array); for (int i = 0; i< hobby_count; ++i) { cJSON* item = cJSON_GetArrayItem(hobby_array, i); char* hobby = cJSON_GetStringValue(item); printf("Hobby %d: %s\n", i+1, hobby); }
同樣地,我們也可以獲取Address中的Country、Province和City數據:
cJSON* address_obj = cJSON_GetObjectItem(root, "Address"); cJSON* country_obj = cJSON_GetObjectItem(address_obj, "Country"); cJSON* province_obj = cJSON_GetObjectItem(address_obj, "Province"); cJSON* city_obj = cJSON_GetObjectItem(address_obj, "City"); char* country = cJSON_GetStringValue(country_obj); char* province = cJSON_GetStringValue(province_obj); char* city = cJSON_GetStringValue(city_obj); printf("Address: %s, %s, %s\n", country, province, city);
在我們讀取、解析、訪問完JSON數據后,需要記得釋放內存,以避免內存泄漏。
cJSON_Delete(root);
cJSON庫提供了非常方便的API接口,它可以輕松地處理JSON數據。在實際應用中,我們可以使用cJSON庫來編寫更高效、更健壯的JSON解析代碼 。
上一篇python 數組行轉列
下一篇python 數組的序號