JSON數(shù)據(jù)是一種輕量級(jí)的數(shù)據(jù)交換格式。它可以用來(lái)存儲(chǔ)和傳輸數(shù)據(jù),常用于客戶端和服務(wù)器之間的數(shù)據(jù)交換。JSON數(shù)據(jù)由鍵值對(duì)組成,使用逗號(hào)分隔,用大括號(hào){}表示對(duì)象,用中括號(hào)[]表示數(shù)組。
JSON數(shù)據(jù)與C語(yǔ)言的關(guān)系密切,因?yàn)樵S多C語(yǔ)言程序需要解析JSON數(shù)據(jù)以便進(jìn)行數(shù)據(jù)處理。在C語(yǔ)言中,可以使用第三方庫(kù) cJSON 來(lái)完成 JSON 數(shù)據(jù)的解析和生成。
#include <stdio.h> #include "cJSON.h" int main() { // 生成 JSON 對(duì)象 cJSON *root = cJSON_CreateObject(); cJSON_AddItemToObject(root, "name", cJSON_CreateString("Alice")); cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(25)); cJSON *hobbies = cJSON_CreateArray(); cJSON_AddItemToArray(hobbies, cJSON_CreateString("reading")); cJSON_AddItemToArray(hobbies, cJSON_CreateString("traveling")); cJSON_AddItemToObject(root, "hobbies", hobbies); // 將 JSON 對(duì)象轉(zhuǎn)為字符串并打印 char *str = cJSON_Print(root); printf("%s\n", str); // 解析 JSON 字符串 cJSON *json = cJSON_Parse(str); printf("%s\n", cJSON_GetObjectItem(json, "name")->valuestring); printf("%d\n", cJSON_GetObjectItem(json, "age")->valueint); cJSON *hobbies_arr = cJSON_GetObjectItem(json, "hobbies"); for (int i = 0; i< cJSON_GetArraySize(hobbies_arr); i++) { printf("%s\n", cJSON_GetArrayItem(hobbies_arr, i)->valuestring); } // 釋放內(nèi)存 cJSON_Delete(root); cJSON_Delete(json); }
上述代碼首先使用 cJSON_CreateObject 創(chuàng)建 JSON 對(duì)象,并使用 cJSON_AddItemToObject 和 cJSON_AddItemToArray 來(lái)添加鍵值對(duì)。然后將 JSON 對(duì)象轉(zhuǎn)為字符串并打印出來(lái)。接著使用 cJSON_Parse 解析 JSON 字符串,并使用 cJSON_GetObjectItem 和 cJSON_GetArrayItem 獲取 JSON 對(duì)象或數(shù)組中的元素。最后使用 cJSON_Delete 釋放內(nèi)存。