色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c 獲取json對(duì)象

在C語(yǔ)言中,如果需要從服務(wù)器端獲取JSON數(shù)據(jù),可以使用一些第三方庫(kù)來(lái)輔助實(shí)現(xiàn)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include <jansson.h>
size_t writefunc(void *ptr, size_t size, size_t nmemb, char **s)
{
size_t new_len = *s ? strlen(*s) : 0;
new_len += size * nmemb;
*s = realloc(*s, new_len + 1);
if (*s == NULL) {
exit(EXIT_FAILURE);
}
memcpy(*s + new_len - (size * nmemb), ptr, size * nmemb);
(*s)[new_len] = '\0';
return size * nmemb;
}
int main(void)
{
CURL *curl;
CURLcode res;
char *response = NULL;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://jsonplaceholder.typicode.com/posts/1");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
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);
}
json_error_t json_error;
json_t * root;
root = json_loads(response, 0, &json_error);
if (!root) {
fprintf(stderr, "error: on line %d: %s\n", json_error.line, json_error.text);
return 1;
}
int id = json_integer_value(json_object_get(root, "id"));
char *title = json_string_value(json_object_get(root, "title"));
printf("id: %d\n", id);
printf("title: %s\n", title);
free(response);
json_decref(root);
return 0;
}

以上代碼使用了libcurl和jansson兩個(gè)庫(kù)來(lái)獲取JSON數(shù)據(jù)并解析。在writefunc函數(shù)中,我們使用realloc來(lái)擴(kuò)展response緩存,在curl_easy_setopt中設(shè)置CURLOPT_WRITEFUNCTION和CURLOPT_WRITEDATA來(lái)將數(shù)據(jù)寫入到response中。

同時(shí),我們使用json_loads函數(shù)來(lái)將JSON字符串轉(zhuǎn)化為json_t對(duì)象,并使用json_object_get來(lái)獲取其中某個(gè)字段的值。

需要注意的是,free(response)將response緩存釋放,json_decref(root)將json_t對(duì)象釋放。