Tc3JsonXmlSampleJsonSaxReader
Beispiel zum Parsen von JSON-Dokumenten via SAX Reader
Dieses Beispiel veranschaulicht, wie eine JSON-Nachricht programmatisch durchlaufen werden kann. Als Basis wird der Funktionsbaustein FB_JsonSaxReader verwendet.
Deklarationsbereich
PROGRAM MAIN
VAR
fbJson : FB_JsonSaxReader;
pJsonParse : JsonSaxHandler;
sJsonDoc : STRING(255) := '{"Values":{"Timestamp":"2017-04-04T12:42:42","Sensor1":42.42,"Sensor2":42}}';
END_VAR
Implementierungsbereich
Durch den Aufruf der Methode Parse(), die Übergabe der JSON-Nachricht als STRING und den Interface-Pointer auf eine Funktionsbaustein-Instanz, die das Interface ITcJsonSaxHandler implementiert, werden der SAX Reader aktiviert und die entsprechenden Callback-Methoden durchlaufen.
fbJson.Parse(sJson := sJsonDoc, ipHdl := pJsonParse);
Callback-Methoden
Die Callback-Methoden werden an der Instanz des Funktionsbausteins, der das Interface ITcJsonSaxHandler implementiert, aufgerufen. Jede Callback-Methode repräsentiert ein „gefundenes“ Element in der JSON-Nachricht. Zum Beispiel wird die Callback-Methode OnStartObject() aufgerufen, sobald eine geöffnete geschweifte Klammer detektiert wurde. Laut der oben genannten Beispiel-JSON-Nachricht werden also die folgenden Callback-Methoden in dieser Reihenfolge durchlaufen:
- OnStartObject(), aufgrund der ersten geöffneten geschweiften Klammer
- OnKey(), aufgrund des Properties "Values"
- OnStartObject(), aufgrund der zweiten geöffneten geschweiften Klammer
- OnKey(), aufgrund des Properties "Timestamp"
- OnString(), aufgrund des Werts von Property "Timestamp"
- OnKey(), aufgrund des Properties "Sensor1"
- OnLreal(), aufgrund des Werts von Property "Sensor1“"
- OnKey(), aufgrund des Properties "Sensor2"
- OnUdint(), aufgrund des Werts von Property "Sensor2"
- OnEndObject(), aufgrund der ersten geschlossenen geschweiften Klammer
- OnEndObject(), aufgrund der zweiten geschlossenen geschweiften Klammer
Innerhalb der Callback-Methoden wird der aktuelle Zustand über eine Instanz des Enums E_JsonStates definiert und gespeichert. Hierüber kann auch ermittelt werden, ob es sich um eine gültige JSON-Nachricht handelt. Wenn zum Beispiel die Callback-Methode OnLreal() aufgerufen wird und sich der Zustand nicht im erwarteten State 70 (JSON_STATE_ONLREAL) befindet, kann an die Methode der Rückgabewert S_FALSE zurückgegeben werden. Der SAX Reader beendet dann automatisch die weitere Verarbeitung.