色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c json讀入

夏志豪1年前8瀏覽0評論

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解析代碼 。