AWS IoT规则JSON密钥上的SQL查询以数字开头

时间:2019-07-18 16:53:22

标签: sql json aws-iot

我已经待了几个小时了,无法弄清。所以我想也许这里有人会想到这个。

我有正在发布到事物影子的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密钥是完全有效的,因此希望可以解决此问题。

想法?

1 个答案:

答案 0 :(得分:0)

尝试一下:

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

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