Неожиданный токен 004 в позиции 0 при публикации объекта JSON в C - PullRequest
0 голосов
/ 13 апреля 2020

У меня проблема при попытке отправить JSON объект, который я создал в C. Сервер способен как отправлять, так и получать данные просто отлично. Я довольно любитель, когда дело доходит до 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" }

Ответ сервера следующий

<code>    <!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)

При перехвате запроса с Wireshark сообщение выглядит так POST запрос И ошибка ответа такова BAD REQUEST 400

Я почти уверен, что ошибка заключается в том, как я строю свой JSON объект, но, как уже упоминалось, я очень новичок в C. Если я жестко закодирую текст вместо объекта, запрос будет успешным. Любая помощь приветствуется. Спасибо!

1 Ответ

0 голосов
/ 13 апреля 2020

В конце концов удалось выяснить это, изменив curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jobj); на curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_object_to_json_string(jobj));

, исправьте меня, если я не прав, но я предполагаю, что я не могу просто отправить объект JSON, не превратив его в String first.

Будем благодарны за любые дальнейшие предложения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...