我正在尝试使用ArduinoJson 6库反序列化Json对象。该对象正在使用PubSubClient库传递一个mqtt回调。有效负载包含以下示例:"{\"action\":\"message\",\"amount\":503}",但我无法检索金额值。使用以下内容时只返回零:
void messageReceived(char *topic, byte *payload, unsigned int length)
{
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload, length);
const int results = doc["amount"];
Serial.print(results);
}这项工作并在需要时返回503份:
DynamicJsonDocument doc(1024);
char json[] = "{\"action\":\"message\",\"amount\":503}";
deserializeJson(doc, json);
const int results = doc["amount"];
Serial.print(results);当我使用以下方法时,我会看到有效负载的结果:
void messageReceived(char *topic, byte *payload, unsigned int length)
{
for (unsigned int i = 0; i < length; i++)
{
Serial.print((char)payload[i]);
}
}是什么阻止我能够解析出第一个方法的金额值呢?
发布于 2022-10-09 22:29:06
更新和解析:在我修复了从Lambda函数发送到IOT端的数据之后,我最初的文章中的第一个方法工作得很好。(我在最初的问题中没有包括一些东西,也不认为它是相关的。原来是这样。)下面是接收数据的Lambda函数的一个片段。问题是数据是作为字符串发送的,而不是解析的。一旦我把反应串起来,然后分析输出,它就起作用了。谢谢您的帮助和帮助。您的建议也同样有效,但只有在我修复了Lambda函数之后。
async function sendToIOT(response) {
const data = JSON.stringify(response);
const iotResponseParams = {
topic: 'mythingname/subscribe',
payload: JSON.parse(data)
};
return iotdata.publish(iotResponseParams).promise()
}发布于 2022-10-09 01:46:11
在用C++进行编程时,它总是需要知道您正在处理的数据类型。payload是一个byte数组,这不是deserializeJson(doc, payload, length);所期望的,请参阅功能签名 of deserializeJson()。
void messageReceived(char *topic, byte *payload, unsigned int length)
{
DynamicJsonDocument doc(128);
deserializeJson(doc, (char*) payload, length);
Serial.print(doc["amount"]);
}https://stackoverflow.com/questions/74000681
复制相似问题