在C語言中使用JSON發(fā)送對象是一個非常方便的方法。JSON(JavaScript Object Notation)是一種輕量級的數(shù)據(jù)交換格式,可用于將結(jié)構(gòu)化數(shù)據(jù)編碼為字符串。C語言中可以使用第三方庫來處理JSON數(shù)據(jù)并發(fā)送至網(wǎng)絡。
在以下示例中,我們將使用cJSON庫來處理JSON數(shù)據(jù)。cJSON是一個輕量級的JSON解析庫,可用于解析JSON數(shù)據(jù)并將其轉(zhuǎn)換為C結(jié)構(gòu)體。我們還將使用libcurl庫來將JSON數(shù)據(jù)發(fā)送到網(wǎng)絡。
#include <cJSON.h> #include <curl/curl.h> int main(void) { // 初始化cURL curl_global_init(CURL_GLOBAL_DEFAULT); // 創(chuàng)建cJSON對象 cJSON *root = cJSON_CreateObject(); // 添加字符串 cJSON_AddStringToObject(root, "name", "John Doe"); // 添加整數(shù) cJSON_AddNumberToObject(root, "age", 30); // 添加布爾值 cJSON_AddBoolToObject(root, "employed", cJSON_TRUE); // 將cJSON對象轉(zhuǎn)換為字符串 char *json_str = cJSON_Print(root); // 創(chuàng)建cURL句柄 CURL *curl = curl_easy_init(); // 設置URL curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/api"); // 設置POST請求 curl_easy_setopt(curl, CURLOPT_POST, 1L); // 設置POST數(shù)據(jù) curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_str); // 發(fā)送請求 CURLcode res = curl_easy_perform(curl); // 檢查請求是否成功 if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } // 釋放cJSON對象 cJSON_Delete(root); // 釋放JSON字符串 cJSON_free(json_str); // 清理cURL curl_easy_cleanup(curl); // 全局清理cURL curl_global_cleanup(); return 0; }
上述代碼首先使用cJSON_CreateObject()函數(shù)創(chuàng)建了一個cJSON對象,并使用cJSON_AddStringToObject()、cJSON_AddNumberToObject()和cJSON_AddBoolToObject()函數(shù)分別添加了字符串、整數(shù)和布爾值。然后,使用cJSON_Print()函數(shù)將cJSON對象轉(zhuǎn)換為字符串。
接下來,使用curl_easy_init()函數(shù)創(chuàng)建了一個新的cURL句柄,并使用curl_easy_setopt()函數(shù)設置URL、POST請求和POST數(shù)據(jù)。最后,使用curl_easy_perform()函數(shù)發(fā)送請求。
在請求發(fā)送后,檢查curl_easy_perform()函數(shù)的返回值以確保請求成功。如果請求失敗,可以使用curl_easy_strerror()函數(shù)打印錯誤信息。
最后,使用cJSON_Delete()函數(shù)釋放cJSON對象,并使用cJSON_free()函數(shù)釋放JSON字符串。使用curl_easy_cleanup()函數(shù)清理cURL句柄。最后,使用curl_global_cleanup()函數(shù)進行全局清理。