在C語言中,使用HTTP請求JSON數據是非常常見的,我們可以利用一些第三方庫,比如cURL進行請求,然后使用一些JSON庫,比如cJSON對返回的數據進行解析。
下面是一個使用cURL和cJSON進行HTTP請求和JSON數據解析的例子:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <curl/curl.h> #include <cjson/cJSON.h> int main(void) { CURL *curl; CURLcode res; char *url = "https://api.example.com/data"; char *data = "{\"username\": \"test\", \"password\": \"123456\"}"; char *response = NULL; cJSON *json = NULL; cJSON *data_obj = NULL; cJSON *item = NULL; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data); res = curl_easy_perform(curl); if(res == CURLE_OK) { curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code); if(response_code == 200) { curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response); curl_easy_perform(curl); json = cJSON_Parse(response); data_obj = cJSON_GetObjectItem(json, "data"); if(data_obj != NULL) { item = cJSON_GetObjectItem(data_obj, "param1"); if(item != NULL) { printf("param1: %s\n", item->valuestring); } item = cJSON_GetObjectItem(data_obj, "param2"); if(item != NULL) { printf("param2: %d\n", item->valueint); } } } } curl_easy_cleanup(curl); } return 0; }
在這個例子中,我們使用cURL發送了一個POST請求到https://api.example.com/data,數據為{\"username\": \"test\", \"password\": \"123456\"}。然后我們解析了返回的JSON數據,并獲取了其中的param1和param2字段的值。
需要注意的是,我們將JSON數據作為字符串傳遞給POST請求,因此需要對JSON數據進行字符串化。