JSON 拡張 - AWS IoT Core

JSON 拡張

入れ子になった JSON オブジェクトを容易に操作するには、次に示す ANSI SQL 構文への拡張を使用できます。

"." 演算子

この演算子は、埋め込み 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 形式でない場合、* はメッセージペイロード全体を raw バイトとして返します。以下に例を示します。

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