本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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" }