json - 如何在 AWS IoT 上访问 MQTT 消息中的嵌套 JSON 元素?
问题描述
AWS IoT 规则正在接收以下主题为“TempSensors”的 MQTT 有效负载:
{"message": "{\"sensor\":\"12345\",\"timestamp\":\"2020-01-01 16:00:00\",\"value\":\"[-0.5]\",\"unit\":\"[\"deg. C\"]\"}", "sequence": 1234}
我想为“消息”的每个元素提取键值对,以便可以将以下内容传递给 AWS DynamoDB:
{"sensor":"12345","timestamp":"2020-01-01 16:00:00","value": -0.5,"unit": "deg. C"}
我以为我可以使用点符号访问嵌套元素,例如:
SELECT message.sensor AS sensorid FROM 'TempSensors'
但这会导致:
{}
或者也许抓住一切使用;
SELECT (SELECT * from message) AS data FROM 'TempSensors'
这导致:
{"data":[{"$unknown":"{\"sensor\":\"12345\",\"timestamp\":\"2020-01-01 16:00:00\",\"value\":\"[-0.5]\",\"unit\":\"[\"deg. C\"]\"}"}]}
或者:
SELECT (SELECT sensor FROM message) AS sensorid FROM 'TempSensors'
结果是:
{"sensorid":[{}]}
必须有一种简单的方法来提取我完全丢失的 JSON 数据。我没看到什么?
解决方案
您收到的有效负载是一个字符串(JSON 对象),您可以使用ArduinoJson
库对其进行反序列化以获取数据。
#include <ArduinoJson.h>
char payload[] = "{\"message\": {\"sensor\":\"12345\",\"timestamp\":\"2020-01-01 16:00:00\",\"value\":[-0.5],\"unit\":[\"deg. C\"]}, \"sequence\": 1234}";
StaticJsonDocument<200> doc; // change memory allocation based on your payload message size
void setup() {
Serial.begin(115200);
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
return;
}
// get the sensor info from the deserialised object doc
const char *sensor = doc["message"]["sensor"];
double value = doc["message"]["value"][0];
const char *unit = doc["message"]["unit"][0];
Serial.printf("Sensor: %s, value: %.1f %s\n", sensor, value, unit);
}
void loop() {
}
推荐阅读
- sql - 无法识别的名称:size_bytes - Google Cloud Platform
- service - 当策略中有多个服务时,Ansible for Fortigate 策略不起作用
- automation - 脚本 - 与 Azure VM 交互
- javascript - 为什么多个远程联合模块不适用于多个远程子反应应用程序和父应用程序?
- snowflake-cloud-data-platform - load_history 视图是否显示使用 copy into 命令加载的空文件的记录?
- python - pyodbc.ProgrammingError: ('SQL 包含 2 个参数标记,但提供了 34 个参数', 'HY000')
- unit-testing - 将逻辑放在对象的密钥对值中是一种好习惯吗?(声纳问题)
- python-3.x - 如何在 Python 3.8 中过滤两个 dict 列表
- python - Python - 将数据拟合到双指数函数
- magento2 - Magento 2:从自定义来源获取库存数量