将Json Payload发送到加州服务器

  • 本文关键字:服务器 Json Payload c
  • 更新时间 :
  • 英文 :


我使用的是Nordic Semiconductor的开发套件nrf9160。我的代码中的服务器主机名是";加利福尼亚州。eclipseprojects。io"以及对等体";5684";。

我想使用CoAP的PUT方法发送一个JSON负载。为此,我使用以下函数创建JSON Payload:

{
cJSON *root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "JSON", 50);
cJSON_AddNumberToObject(root, "Content-Form", 12);
return root;
}

主要功能:

cJSON_Init();
cJSON *item = createJsonFromParams();
char *payload=cJSON_Print(item);

我发送的是:

{
"JSON": 50,
"Content-Form": 12
}

服务器得到的是:"{nt"

有人能帮忙告诉我,为什么会这样吗?这是发送JSON Payload的合适方式吗?

的结果

cJSON_Init();
cJSON *item = createJsonFromParams();
char *payload=cJSON_Print(item);

将是一个带有\000字节的通用C字符串,用于终止该字符串。

coap_packet_append_payload(&request, (uint8_t *)payload, sizeof(payload)-1);

是一个snippet,通常用于与sizeof相同范围的数组定义。

char payload[] = "I'm a array";
printf("sizeof %d, strlen %dn", sizeof(payload), strlen(payload));

打印:

尺寸12,strlen 11

因为sizeof包含尾部\000,所以strlen不包含。

如果您使用sizeof作为指针,作为

char *payload=cJSON_Print(item);
printf("sizeof %d, strlen %dn", sizeof(payload), strlen(payload));

结果将是指针的大小(取决于您的cpu架构(和返回的JSON字符串的长度。

尺寸4,strlen n

现在,您可以将错误减少1(对于数组来说是可以的(,结果是3。你需要做什么来修复它:

coap_packet_append_payload(&request, (uint8_t *)payload, strlen(payload));

请注意:C有很多陷阱,在这里,不要忘记在准备好后释放有效负载。如果您陷入这样的陷阱,您的应用程序将变得不稳定。

最新更新