gpt4 book ai didi

c - AWS IoT - JSON 格式不正确

转载 作者:行者123 更新时间:2023-11-30 19:03:22 24 4
gpt4 key购买 nike

我尝试将此 JSON 数据包发送到 AWS IoT,但 AWS 无法识别它。我正在使用示例 ESP32 AWS FreeRTOS 代码,但无法理解包含以下代码的 JSON 数据包的正确格式:

#define echoMAX_DATA_LENGTH 20

char cDataBuffer[ echoMAX_DATA_LENGTH ];

(void) snprintf(cDataBuffer, echoMAX_DATA_LENGTH, "{\"state\":{\"reported\":%.*d}, \"clientToken\":\"%d\"}", x, x, x);

/* Setup the publish parameters. */
memset( &( xPublishParameters ), 0x00, sizeof( xPublishParameters ) );
xPublishParameters.pucTopic = echoTOPIC_NAME;
xPublishParameters.pvData = cDataBuffer;
xPublishParameters.usTopicLength = ( uint16_t ) strlen( ( const char * ) echoTOPIC_NAME );
xPublishParameters.ulDataLength = ( uint32_t ) strlen( cDataBuffer );
xPublishParameters.xQoS = eMQTTQoS1;

AWS测试页面,无法显示消息并已将其转换为UTF-8(此错误消息如下)

enter image description here

最佳答案

增加 echoMAX_DATA_LENGTH 使其足够大以容纳整个 JSON 消息。

代码中 JSON 的静态部分(没有由 snprintf() 填充的值)是 34 个字符,因此这不可能与 echoMAX_DATA_LENGTH 一起使用> 设置为 20 - 它始终会生成 JSON 片段而不是整个 JSON 对象。

记住 snprintf() 的长度使用包含 C 字符串终止字符“\0”的字节,因此您需要使 echoMAX_DATA_LENGTH 比最大 JSON 消息总长度大 1。

当您增加 echoMAX_DATA_LENGTH 时,请尝试在 snprintf() 之后添加调试消息,以便您可以看到正在生成的 JSON。如果您的代码已设置为使用 Serial,请添加:

Serial.println(cDataBuffer);

snprintf() 之后,以便您可以确认是否已正确生成 JSON。

关于c - AWS IoT - JSON 格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54040025/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com