FindMemberPath

FindMemberPath 1:

Diese Methode sucht in einem JSON-Dokument nach einem bestimmten Property und gibt dieses zurück. Das Property wird hierbei nach dessen Pfad im Dokument spezifiziert. Wenn kein entsprechendes Property gefunden wird, wird 0 zurückgegeben.

Syntax

METHOD FindMemberPath : SJsonValue
VAR_INPUT
  v      : SJsonValue
END_VAR
VAR_IN_OUT CONSTANT
  member : STRING;
END_VAR

FindMemberPath 2: Rückgabewert

Name

Typ

FindMemberPath

SJsonValue

FindMemberPath 3: Eingänge

Name

Typ

v

SJsonValue

FindMemberPath 4:/FindMemberPath 5: Ein-/Ausgänge

Name

Typ

member

STRING

Beispielaufruf:

jsonDoc  := fbJson.ParseDocument(sExistingJsonDocument);
jsonProp := fbJson.FindMemberPath(jsonDoc, sPath);

Der Zugriff auf verschachtelte Objekte funktioniert nach dem Schema a/b/c, um eine Variable in einer JSON-Hierarchie zu finden. Der Aufruf für die Variable c des folgenden JSON-Dokuments lautet:

jsonProp := fbJson.FindMemberPath(jsonDoc, 'a/b/c');
{
 "a":{
   "b":{
    "c": 123
       }
     }
}

Unterstützung für Arrays

Die Methode unterstützt JSON-Dokumente mit Arrays ab TwinCAT-Version >3.1.4024.35. Mithilfe des Zeichens # kann auf Elemente eines Arrays zugegriffen werden.

jsonProp := fbJson.FindMemberPath(jsonDoc, '#1/Third#2');
[
  {
  "First": 4
  },
  {
  "Second": 12,
  "Third": [
    1,
    2,
    3
    ],
   "Fourth": {
    "a": true
    }
  },
]

Der Beispielaufruf greift auf das zweite Element des äußeren Arrays zu (#1), anschließend auf das dritte Element des Arrays unter dem Unterelement Third.

Behandlung von Sonderfällen

Das Einfügen des Zeichens ~ sorgt für die Sonderbehandlung innerhalb eines Pfades. Die folgende Tabelle listet die verschiedenen Möglichkeiten auf.

Ausdruck

Ergebnis

Beispiel

~0

~ wird als Zeichen im String verwendet.

Test/Hallo~0123 wird zu Test/Hallo~123

~1

Der Ausdruck wird durch das Zeichen / ersetzt, was nicht als Trenner, sondern als Teil des Strings interpretiert wird.

Test/Hallo~1123 wird Test/Hallo/123

~2

Der Ausdruck wird durch das Zeichen # ersetzt, was nicht als Array-Index, sondern als Teil des Strings interpretiert wird.

Test/Hallo~2123 wird zu Test/Hallo#123