首页 > 解决方案 > 在 C 中发布 JSON 对象时,位置 0 处出现意外的令牌 004

问题描述

我在尝试发送我在 C 中创建的 JSON 对象时遇到问题。服务器能够很好地发送和接收数据。说到C,我是个业余爱好者。

    static int main_curl(neardal_record* pRecord)
    {
    CURL *curl;
    CURLcode res;
    char * record = pRecord->representation;

    json_object *jobj = json_object_new_object(); 
    json_object *jstring = json_object_new_string(record);

    json_object_object_add(jobj,"id", jstring);


    curl = curl_easy_init();

    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Accept: application/json");
    headers = curl_slist_append(headers, "Content-Type: application/json");
    headers = curl_slist_append(headers, "charset: utf-8");

    curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.43.20:5000/api/swipes");

    curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jobj);
    curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcrp/0.1");
    printf ("The json object created:%s ",json_object_to_json_string(jobj));


    res = curl_easy_perform(curl);

    curl_easy_cleanup(curl);
    curl_global_cleanup();
    return res;
    }

当打印出 JSON 对象时,我得到了这个 -> The json object created:{ "id": "hello, world" }

服务器响应如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="utf-8">
    <title>Error</title>
    </head>
    <body>
    <pre>SyntaxError: Unexpected token  in JSON at position 0<br> &nbsp; &nbsp;at JSON.parse 
    (&lt;anonymous&gt;)<br> &nbsp; &nbsp;at createStrictSyntaxError 
    (/Users/backend/node_modules/body-parser/lib/types/json.js:158:10)<br> 
    &nbsp; &nbsp;at parse (/Users/backend/node_modules/body- 
    parser/lib/types/json.js:83:15)<br> &nbsp; &nbsp;at 
    /Users/backend/node_modules/body-parser/lib/read.js:121:18<br> &nbsp; 
    &nbsp;at invokeCallback (/Users/backend/node_modules/raw- 
    body/index.js:224:16)<br> &nbsp; &nbsp;at done 
    (/Users/backend/node_modules/raw-body/index.js:213:7)<br> &nbsp; 
    &nbsp;at IncomingMessage.onEnd (/Users/backend/node_modules/raw- 
    body/index.js:273:7)<br> &nbsp; &nbsp;at IncomingMessage.emit (events.js:333:22)<br> &nbsp; 
    &nbsp;at endReadableNT (_stream_readable.js:1201:12)<br> &nbsp; &nbsp;at 
    processTicksAndRejections (internal/process/task_queues.js:84:21)</pre>
    </body>
    </html>

当使用 Wireshark 拦截请求时,Post 看起来像这个 POST 请求 并且响应错误是这个 BAD REQUEST 400

我几乎可以肯定,错误是我构建 JSON 对象的方式,但如前所述,我在 C 语言中很新。如果我硬编码文本而不是对象,则请求成功。任何帮助将非常感激。谢谢!

标签: cjsoncurljson-c

解决方案


毕竟通过将其更改为此 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jobj); 来 设法弄清楚curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_object_to_json_string(jobj));

如果我错了,请纠正我,但我假设我不能只发送一个 JSON 对象而不先将其转换为字符串。

任何进一步的建议将不胜感激!


推荐阅读