我已经待了几个小时了,无法弄清。所以我想也许这里有人会想到这个。
我有正在发布到事物影子的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密钥是完全有效的,因此希望可以解决此问题。
想法?
答案 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"
由四部分组成,以点分隔。但是,如果其中一个部分中有一个点怎么办?
(从技术上讲,只需要引用包含某些字符的部分,但有时仅将它们全部引用会更容易)。