JSON 扩展 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

JSON 扩展

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

"." 运算符

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

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" }