在C語言中,要POST一個JSON數據并解析返回結果可以使用libcurl和cJSON這兩個庫。
首先,我們需要用libcurl來POST一個JSON數據,代碼如下:
CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://localhost:8080/api"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"John Smith\",\"age\":21,\"city\":\"New York\"}"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, "Content-Type:application/json"); res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } curl_global_cleanup();
這里我們使用了curl_easy_setopt()函數來設置POST數據和HTTP頭,然后使用curl_easy_perform()函數執行POST請求。
接著,我們需要用cJSON來解析服務器返回的JSON數據,代碼如下:
char *data = NULL; cJSON *json = NULL; cJSON *name = NULL; cJSON *age = NULL; cJSON *city = NULL; long data_size; data = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &data_size); if(data) { json = cJSON_Parse(data); if(!json) printf("Error before: [%s]\n", cJSON_GetErrorPtr()); else { name = cJSON_GetObjectItemCaseSensitive(json, "name"); printf("Name: %s\n", name->valuestring); age = cJSON_GetObjectItemCaseSensitive(json, "age"); printf("Age: %d\n", age->valueint); city = cJSON_GetObjectItemCaseSensitive(json, "city"); printf("City: %s\n", city->valuestring); } }
這里我們使用了curl_easy_getinfo()函數來獲取服務器返回的JSON數據,然后使用cJSON_Parse()函數解析JSON數據,最后使用cJSON_GetObjectItemCaseSensitive()函數獲取JSON數據中的字段。