首页 > 解决方案 > 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 密钥是完全有效的,因此希望有一个解决方法。

想法?

标签: sqljsonaws-iot

解决方案


尝试这个:

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"有四个部分,用点分隔。但是,如果其中一个部分中有一个点怎么办?

(从技术上讲,只有包含某些字符的部分需要被引用,但有时将它们全部引用会更容易)。


推荐阅读