c是一種流行的編程語(yǔ)言,可以用它來(lái)解析HTTP JSON。
首先,我們需要使用c的HTTP庫(kù)來(lái)獲取JSON數(shù)據(jù)。常用的HTTP庫(kù)包括curl和libcurl。這里我們以curl為例。
#include <stdio.h> #include <curl/curl.h> #include <jansson.h> size_t write_callback(void *buffer, size_t size, size_t nmemb, void *userp) { return fwrite(buffer, size, nmemb, (FILE *)userp); } int main() { CURL *curl; CURLcode res; FILE *fp; char *url = "https://api.example.com/data.json"; char *filename = "data.json"; curl = curl_easy_init(); if(curl) { fp = fopen(filename,"wb"); curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); res = curl_easy_perform(curl); curl_easy_cleanup(curl); fclose(fp); } return 0; }
上面的代碼使用curl從URL中獲取JSON數(shù)據(jù)并保存到本地文件中。我們還需要使用jansson庫(kù)來(lái)解析JSON。
#include <stdio.h> #include <jansson.h> int main() { char *filename = "data.json"; FILE *fp = fopen(filename, "r"); fseek(fp, 0, SEEK_END); long len = ftell(fp); char *data = malloc(len + 1); fseek(fp, 0, SEEK_SET); fread(data, 1, len, fp); fclose(fp); data[len] = '\0'; json_error_t error; json_t *root = json_loads(data, 0, &error); if(!root) { printf("error: on line %d: %s\n", error.line, error.text); return 1; } json_t *name = json_object_get(root, "name"); if(!json_is_string(name)) { printf("error: name is not a string\n"); json_decref(root); return 1; } printf("name: %s\n", json_string_value(name)); json_t *age = json_object_get(root, "age"); if(!json_is_integer(age)) { printf("error: age is not an integer\n"); json_decref(root); return 1; } printf("age: %d\n", json_integer_value(age)); json_decref(root); return 0; }
上面的代碼使用jansson庫(kù)解析JSON數(shù)據(jù)并獲取其中的"name"和"age"字段。我們可以根據(jù)實(shí)際情況修改代碼來(lái)獲取其他數(shù)據(jù)字段。
下一篇vue 3 ui框架