在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请求响应错误如下错误请求400

我几乎可以肯定,这个错误是我构建JSON对象的方式,但如上所述,我对C非常陌生。如果我硬编码文本而不是对象,那么请求就是成功的。任何帮助都将不胜感激。谢谢

通过更改curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jobj);到这个curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_object_to_json_string(jobj));

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

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

最新更新