在進(jìn)行Web開發(fā)中很常遇到需要獲取JSON數(shù)據(jù)的情況,而C語言也提供了獲取JSON數(shù)據(jù)的方法。以下是一個(gè)簡單的C語言獲取Web JSON數(shù)據(jù)的示例。
#include <stdio.h> #include <stdlib.h> #include <curl/curl.h> #include <cjson/cJSON.h> int main(void) { CURL *curl; CURLcode res; char *data; cJSON *root, *item; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://api.site.com/data.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); return 1; } data = curl_easy_escape(curl, res, 0); root = cJSON_Parse(data); if(!root) { fprintf(stderr, "Error before: [%s]\n", cJSON_GetErrorPtr()); curl_easy_cleanup(curl); return 1; } item = cJSON_GetObjectItem(root, "data"); printf("%s\n", cJSON_Print(item)); cJSON_Delete(root); curl_easy_cleanup(curl); return 0; } }
上面的代碼使用了libcurl和cJSON這兩個(gè)庫。首先使用curl_easy_init()初始化了一個(gè)curl的對象。然后設(shè)置了CURL的屬性,即請求的URL地址。curl_easy_perform()進(jìn)行實(shí)際的URL請求,并返回狀態(tài)碼。如果狀態(tài)碼非正常,程序就會輸出錯(cuò)誤信息并結(jié)束。
如果請求成功,就會獲取到j(luò)son的字符串。調(diào)用cJSON_Parse()函數(shù)解析json數(shù)據(jù),并返回一個(gè)cJSON對象。如果解析失敗,函數(shù)返回NULL。程序在這里檢測解析結(jié)果是否有效,如果無效就輸出錯(cuò)誤信息并結(jié)束。
使用cJSON_GetObjectItem()獲取json中data的數(shù)據(jù)并打印出來。最后需要使用cJSON_Delete()釋放cJSON對象,并使用curl_easy_cleanup()關(guān)閉curl對象。
上一篇vue.js $even
下一篇vue 多次吸頂