微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 AWS IoT Core 规则和 AWS Lambda 处理嵌套的 JSON 消息

如何解决使用 AWS IoT Core 规则和 AWS Lambda 处理嵌套的 JSON 消息

我们正在使用 AWS IoT 规则将所有消息从事物转发到 Lambda 函数,并在途中使用此查询附加一些属性

SELECT *,topic(2) AS deviceid,timestamp() AS RoutedAt FROM 'devices/+/message'

发送到主题的消息是嵌套的 JSON:

{
   version: 1,type: "string",payload: {
     property1: "foo",nestedPayload: {
         nestedProperty: "bar"
    }
  }
}

当我们对另一个规则使用相同的查询并将消息路由到 S3 存储桶而不是 Lambda 时,存储桶中的结果 JSON 文件符合预期:

{
   deviceid: "test",RoutedAt:1618311374770,version: 1,nestedPayload: {
         nestedProperty: "bar"
    }
  }
}

但是当路由到一个 lambda 函数时,“nestedPayload”的属性被拉高了一层:

{
   deviceid: "test",nestedProperty: "bar"
  }
}

但是,在使用 VS Code 在本地调试 Lambda 时,提供 JSON 文件(换句话说:未连接到 AWS IoT Core),JSON 结构符合预期,这就是为什么我假设错误不是与JSON 序列化器/反序列化器,但有规则。

有人遇到过同样的问题吗?

解决方法

事实证明,问题出在规则的 SQL 版本上。

我们使用 CDK 创建了到 Lambda 的规则路由,默认情况下将版本设置为“2015-10-08”。路由到 S3 的规则没有显示错误,是手动创建并使用版本“2016-03-23”。将规则路由更新到 Lambda 以同时使用“2016-03-23”修复了该问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?