Как получить код JSON в тип данных C, полученный через libcurl - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать программу на C, которая получает данные JSON из API Schiphol и помещает данные JSON в строку или другой тип данных. В этот момент я получаю статистику HTTP-запроса GET, который я посылаю через libcurl вместе со всей строкой кода JSON. Но я не могу получить это в одну переменную.

Я пытался следовать этому примеру: https://curl.haxx.se/libcurl/c/getinmemory.html

Однако часть моего JSON-кода повреждена при преобразовании.

Это код, который я сейчас использую:

#include <curl/curl.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    struct curl_slist *chunk = NULL;

    /* Add some custom headers */ 
    chunk = curl_slist_append(chunk, "Accept: application/json");
    chunk = curl_slist_append(chunk, "app_id: ------");
    chunk = curl_slist_append(chunk, "app_key: ------");
    chunk = curl_slist_append(chunk, "ResourceVersion: v4");

    /* set our custom set of headers */ 
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);


    /* Set the url */ 
    curl_easy_setopt(curl, CURLOPT_URL, "https://api.schiphol.nl/public-flights/flights?includedelays=false&page=0&sort=%2BscheduleTime");

    /* tell libcurl some extra stuff*/ 
    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");


    /* Perform the request, res will get the return code */ 
    res = curl_easy_perform(curl);
    /* Check for errors */ 
    if(res != CURLE_OK)
      fprintf(stderr, "curl_easy_perform() failed: %s\n",
              curl_easy_strerror(res));

    /* cleanup */
    curl_easy_cleanup(curl);
  }
  return 0;
}

Поскольку вывод такой большой, я перечислил его здесь: https://pastebin.com/0jMb6LRp

Из этого я хочу, чтобы в переменную входила только часть JSON, чтобы я мог использовать анализатор JSON jsmn для извлечения конкретных значений, которые мне нужны. Заранее спасибо за помощь!

...