在 C 中发布 JSON 对象时位置 0 出现意外标记 004

Unexpected token 004 at position 0 when posting JSON object in C

我在尝试发送我在 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 request 响应错误是这样的 BAD REQUEST 400

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

终于通过改变这个弄明白了 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jobj); 对此 curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_object_to_json_string(jobj));

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

如有任何进一步的建议,我们将不胜感激!