JSON 扩展 - AWS IoT Core

JSON 扩展

您可以使用 ANSI SQL 语法的以下扩展,以便于使用嵌套 JSON 对象。

"." 运算符

此运算符可访问与 ANSI SQL 和 JavaScript 相同的嵌入式 JSON 对象和函数的成员。例如:

SELECT foo.bar AS bar.baz FROM 'topic/subtopic'

从以下发送至 topic/subtopic 主题的消息负载中选择 foo 对象中的 bar 属性。

{ "foo": { "bar": "RED", "bar1": "GREEN", "bar2": "BLUE" } }

如果 JSON 属性名称包含连字符或数字字符,则“点”符号将不起作用。相反,您必须使用 get 函数来提取属性的值。

在此示例中,以下消息将发送至 iot/rules 主题。

{ "mydata": { "item2": { "0": { "my-key": "myValue" } } } }

通常情况下,my-key 的值将被标识为在此查询中。

SELECT * from iot/rules WHERE mydata.item2.0.my-key= "myValue"

但是,由于属性名称 my-key 包含连字符,而 item2 包含一个数字字符,因此 get 函数必须按以下查询所示的方法使用。

SELECT * from 'iot/rules' WHERE get(get(get(mydata,"item2"),"0"),"my-key") = "myValue"

* 运算符

该运算符与 ANSI SQL 中的 * 通配符的运作方式相同。该运算符仅用于 SELECT 子句,并会创建包含消息数据的全新 JSON 对象。如果消息负载不是 JSON 格式,* 将以原始字节形式返回整个消息负载。例如:

SELECT * FROM 'topic/subtopic'
将函数应用到属性值

下面显示了一个可能由设备发布的 JSON 负载示例:

{ "deviceid" : "iot123", "temp" : 54.98, "humidity" : 32.43, "coords" : { "latitude" : 47.615694, "longitude" : -122.3359976 } }

下面的示例将函数应用到 JSON 负载中的一个属性值:

SELECT temp, md5(deviceid) AS hashed_id FROM topic/#

此查询的结果为以下 JSON 对象:

{ "temp": 54.98, "hashed_id": "e37f81fb397e595c4aeb5645b8cbbbd1" }