首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ArduinoJson库从mqtt有效负载反序列化Json对象

使用ArduinoJson库从mqtt有效负载反序列化Json对象
EN

Stack Overflow用户
提问于 2022-10-08 21:33:23
回答 2查看 152关注 0票数 0

我正在尝试使用ArduinoJson 6库反序列化Json对象。该对象正在使用PubSubClient库传递一个mqtt回调。有效负载包含以下示例:"{\"action\":\"message\",\"amount\":503}",但我无法检索金额值。使用以下内容时只返回零:

代码语言:javascript
复制
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份:

代码语言:javascript
复制
DynamicJsonDocument doc(1024);
char json[] = "{\"action\":\"message\",\"amount\":503}";
deserializeJson(doc, json);
const int results = doc["amount"];
Serial.print(results);

当我使用以下方法时,我会看到有效负载的结果:

代码语言:javascript
复制
void messageReceived(char *topic, byte *payload, unsigned int length)
{
  for (unsigned int i = 0; i < length; i++)
  {
    Serial.print((char)payload[i]);
  }
}

是什么阻止我能够解析出第一个方法的金额值呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-09 22:29:06

更新和解析:在我修复了从Lambda函数发送到IOT端的数据之后,我最初的文章中的第一个方法工作得很好。(我在最初的问题中没有包括一些东西,也不认为它是相关的。原来是这样。)下面是接收数据的Lambda函数的一个片段。问题是数据是作为字符串发送的,而不是解析的。一旦我把反应串起来,然后分析输出,它就起作用了。谢谢您的帮助和帮助。您的建议也同样有效,但只有在我修复了Lambda函数之后。

代码语言:javascript
复制
async function sendToIOT(response) {

const data = JSON.stringify(response);

const iotResponseParams = {
    topic: 'mythingname/subscribe',
    payload: JSON.parse(data)
};

return iotdata.publish(iotResponseParams).promise()
}
票数 0
EN

Stack Overflow用户

发布于 2022-10-09 01:46:11

在用C++进行编程时,它总是需要知道您正在处理的数据类型。payload是一个byte数组,这不是deserializeJson(doc, payload, length);所期望的,请参阅功能签名 of deserializeJson()

代码语言:javascript
复制
void messageReceived(char *topic, byte *payload, unsigned int length)
{
  DynamicJsonDocument doc(128);
  deserializeJson(doc, (char*) payload, length);
  Serial.print(doc["amount"]);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74000681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档