在游戲開發中,經常需要使用數據表來存放游戲中使用到的各種數據,例如角色屬性、武器屬性、道具屬性等等。而在C語言中,使用JSON格式來讀寫數據表是十分方便的。
首先,我們需要使用一個JSON庫,我個人比較常用的是cJSON庫。
在使用cJSON之前,需要先進行庫的初始化,代碼如下:
cJSON* root = NULL; char* json_data = NULL; FILE* fp = fopen("data.json", "rb"); fseek(fp, 0, SEEK_END); long len = ftell(fp); fseek(fp, 0, SEEK_SET); json_data = (char*)malloc(len + 1); fread(json_data, 1, len, fp); json_data[len] = '\0'; fclose(fp); root = cJSON_Parse(json_data); free(json_data);
上述代碼中,首先打開文件,將文件的內容讀入到一個字符數組中,然后使用cJSON_Parse()函數解析這個字符數組,并將解析結果保存到一個cJSON對象中。
接下來,我們可以通過cJSON對象來獲取JSON中的各種數據。例如,我們可以通過以下方式獲取一個名為“player”的對象:
cJSON* player = cJSON_GetObjectItem(root, "player");
接著,我們可以通過cJSON對象來獲取子對象、數組和值。例如,我們可以通過以下方式獲取對象“player”的屬性“name”所對應的字符串值:
cJSON* name = cJSON_GetObjectItem(player, "name"); const char* player_name = cJSON_GetStringValue(name);
同樣地,如果想要獲取數組中的值,可以使用以下代碼:
cJSON* weapons = cJSON_GetObjectItem(player, "weapons"); int weapons_count = cJSON_GetArraySize(weapons); for (int i = 0; i< weapons_count; i++) { cJSON* weapon = cJSON_GetArrayItem(weapons, i); const char* weapon_name = cJSON_GetStringValue(weapon); // do something with weapon_name }
在讀完表格數據后,如果需要修改并寫回表格文件,也非常簡單。只需要通過cJSON庫創建一個新的JSON對象并設置相應的屬性,然后使用cJSON庫提供的API將新的JSON對象寫入表格文件中即可。代碼如下:
// 創建一個新的JSON對象 cJSON* data = cJSON_CreateObject(); cJSON_AddStringToObject(data, "name", "Alice"); cJSON_AddNumberToObject(data, "age", 18); cJSON_AddBoolToObject(data, "female", true); // 將新的JSON對象寫回文件中 FILE* out = fopen("newdata.json", "w"); char* data_str = cJSON_Print(data); fputs(data_str, out); fclose(out);
上述代碼中,首先創建一個新的cJSON對象,然后設置對象的屬性。最后,使用cJSON庫提供的cJSON_Print()函數將cJSON對象轉換成字符串,并將字符串寫入到表格文件中。
總之,使用C語言和JSON格式讀寫數據表非常方便,而且在開發過程中得到了廣泛的應用。
上一篇c json讀取配置文件
下一篇vue clie使用