curl在c中,输出在jq中

xxhby3vn  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(141)

我在c中调用curl如下:

#include <curl/curl.h>

#include <stdio.h>

int main(){

    CURL *ch;

    CURLcode res;

    ch = curl_easy_init();

    curl_easy_setopt(ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/todos/2");

    res = curl_easy_perform(ch);

    curl_easy_cleanup(ch);

    }

它会很好地打印到命令行:

$./mycurl
{
  "userId": 1,
  "id": 2,
  "title": "quis ut nam facilis et officia qui",
  "completed": false
}

但是我想使用jq来解析json并从一个编译的c文件中输出。我该如何做到这一点而不做:./mycurl | jq
而是把它全部汇编在一起

hk8txs48

hk8txs481#

如前所述,使用JSON库来解析输出是一个更好的主意。库为您提供了一个API,这是一种更直接的方式来表达您正在尝试做的事情,并将为您提供更好的错误处理。也就是说,我很好奇,所以下面是如何将数据传递给jq

#define _POSIX_C_SOURCE 2
#include <curl/curl.h>
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>

int main(void) {
    FILE *f = popen("jq .userId", "w");
    if(!f) {
        printf("jq failed\n");
        return 1;
    }
    dup2(fileno(f), STDOUT_FILENO);
    CURL *ch = curl_easy_init();
    curl_easy_setopt(ch, CURLOPT_URL, "https://jsonplaceholder.typicode.com/todos/2");
    CURLcode res = curl_easy_perform(ch);
    curl_easy_cleanup(ch);
    fclose(stdout);
    return pclose(f);
}

和输出:

相关问题