JSON Extensions - AWS IoT Core

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

JSON Extensions

您可以使用下列 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" }