sql - AWS IoT 规则 JSON 键上的 SQL 查询以数字开头
问题描述
我已经在这几个小时了,无法弄清楚。所以我想也许这里有人会有想法。
我有 JSON,它正在发布到一个东西影子(发布的 JSON 格式不在我的控制之下)。JSON 看起来像这样:
{"state":{"reported":{"0013A20011223344":{"input_1":1}}}}
我尝试了这个查询语句,它将用于向 SNS 发送发布:
SELECT "input closed" AS default FROM "$aws/things/Cell_Test_Thing/shadow/update" WHERE state.reported.0013A200418C5535.input_1 = 1
问题是 SQL 查询不喜欢以 0 开头的键。我通过将 0013... 替换为此处的设备来确定这一点,它运行良好:
SELECT "input closed" AS default FROM "$aws/things/Cell_Test_Thing/shadow/update" WHERE state.reported.device.input_1 = 1
所以问题是 JSON 键以数字开头。如果我将设备更改为 device0 它可以工作,但如果你将它更改为 0device 它会失败。据我所知,以数字开头的 JSON 密钥是完全有效的,因此希望有一个解决方法。
想法?
解决方案
尝试这个:
SELECT "input closed" AS default
FROM "$aws/things/Cell_Test_Thing/shadow/update"
WHERE "state"."reported"."0013A200418C5535"."input_1" = 1
名称的每个部分都必须用引号引起来。这是因为该名称具有四个部分的结构。
为什么不能只使用一组引号?这样想吧。四部分名称"state"."reported"."0013A200418C5535"."input_1"
有四个部分,用点分隔。但是,如果其中一个部分中有一个点怎么办?
(从技术上讲,只有包含某些字符的部分需要被引用,但有时将它们全部引用会更容易)。
推荐阅读
- android - 我有一个芯片组。如果没有选择任何芯片,则会显示一个列表,我希望在未选中芯片时显示相同的芯片
- node.js - 无法安装松露快递盒?
- sql-server - 在 SQL Server 中创建输出多个文件而不是追加到一个文件的作业
- python - 阅读台词并制作字典
- flutter - 未处理的异常:MissingPluginException(在通道 com.roughike/flutter_facebook_login 上找不到方法登录的实现)
- r - 使用 R 上的 SPEI 包计算 SPEI 时,在所有年份中仅获得一个特定月份的 NA
- node.js - SaxonJS 性能问题
- json - XML 的 JSON 模式
- hbase - 由本地作业运行器运行的 hbase 导出快照工具,而不是 hadoop 集群
- javascript - React JS 中的奇怪值错误 onChange