Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
JSON-Erweiterungen
Sie können die folgenden Erweiterungen für die ANSI SQL-Syntax verwenden, um die Arbeit mit verschachtelten JSON-Objekten zu vereinfachen.
"." Operator
Dieser Operator greift auf Elemente in eingebetteten JSON-Objekten zu und funktioniert genauso wie ANSI SQL und. JavaScript Beispielsweise:
SELECT foo.bar AS bar.baz FROM 'topic/subtopic'
wählt den Wert der bar
-Eigenschaft im foo
-Objekt aus der folgenden Nachrichten-Payload aus, die an das topic/subtopic
-Thema gesendet wurde.
{ "foo": { "bar": "RED", "bar1": "GREEN", "bar2": "BLUE" } }
Wenn ein JSON-Eigenschaftsname einen Bindestrich oder numerische Zeichen enthält, funktioniert die Notation „Punkt“ nicht. Stattdessen müssen Sie die Funktion get verwenden, um den Wert der Eigenschaft zu extrahieren.
In diesem Beispiel wird die folgende Nachricht an das iot/rules
-Thema gesendet.
{ "mydata": { "item2": { "0": { "my-key": "myValue" } } } }
Normalerweise wird der Wert von my-key
wie in dieser Abfrage identifiziert.
SELECT * from iot/rules WHERE mydata.item2.0.my-key= "myValue"
Da der Eigenschaftsname my-key
jedoch einen Bindestrich und ein numerisches Zeichen item2
enthält, muss die Funktion get verwendet werden, wie die folgende Abfrage zeigt.
SELECT * from 'iot/rules' WHERE get(get(get(mydata,"item2"),"0"),"my-key") = "myValue"
*
-Operator
Dieser funktioniert genauso wie der Platzhalter *
in ANSI SQL. Er wird nur in der SELECT-Klausel verwendet und erstellt ein neues JSON-Objekt, das die Nachrichtdaten enthält. Wenn die Nachrichtnutzlast nicht im JSON-Format vorliegt, gibt *
die gesamte Nachrichtnutzlast als Rohbytes zurück. Beispielsweise:
SELECT * FROM 'topic/subtopic'
Anwenden einer Funktion auf einen Attributwert
Im Folgenden finden Sie ein Beispiel für eine JSON-Nutzlast, die von einem Gerät veröffentlicht werden kann:
{ "deviceid" : "iot123", "temp" : 54.98, "humidity" : 32.43, "coords" : { "latitude" : 47.615694, "longitude" : -122.3359976 } }
Das folgende Beispiel wendet eine Funktion auf einen Attributwert in einer JSON-Nutzlast an:
SELECT temp, md5(deviceid) AS hashed_id FROM topic/#
Das Ergebnis dieser Abfrage ist das folgende JSON-Objekt:
{ "temp": 54.98, "hashed_id": "e37f81fb397e595c4aeb5645b8cbbbd1" }