CopyJson

CopyJson 1:

Diese Methode extrahiert ein JSON-Objekt aus einem Key und speichert dieses in einer Variablen vom Datentyp STRING. Dieser STRING kann eine beliebige Länge haben. Als Rückgabewert liefert die Methode die Länge des kopierten JSON-Objekts (inklusive Nullterminierung). Falls der Zielpuffer zu klein ist, wird dieser durch eine Nullterminierung geleert und als Länge 0 zurückgegeben.

Syntax

METHOD CopyJson : UDINT
VAR_INPUT
  v    : SJsonValue;
END_VAR
VAR_IN_OUT CONSTANT
  pDoc : STRING;
  nDoc : UDINT;
END_VAR

CopyJson 2: Rückgabewert

Name

Typ

CopyJson

UDINT

CopyJson 3: Eingänge

Name

Typ

v

SJsonValue

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

Name

Typ

pDoc

STRING

nDoc

STRING

Beispielaufruf:

Gegeben sei das folgende JSON-Dokument, das in den DOM-Speicher geladen wird:

sMessage := ' {"serialNumber":"123","meta":{"batteryVoltage":"1547mV","clickType":"SINGLE"}}';

Der Wert des JSON-Objekts „meta“ soll extrahiert und in einer Variablen vom Datentyp STRING gespeichert werden. Zunächst wird das JSON-Dokument iterativ nach dem Property „meta“ durchsucht, anschließend wird dessen Wert bzw. Unterobjekt durch Aufruf der Methode CopyJson() extrahiert.

jsonDoc         := fbJson.ParseDocument(sMessage);
jsonIterator    := fbJson.MemberBegin(jsonDoc);
jsonIteratorEnd := fbJson.MemberEnd(jsonDoc);
WHILE jsonIterator <> jsonIteratorEnd DO
  sName         := fbJson.GetMemberName(jsonIterator);
  jsonValue     := fbJson.GetMemberValue(jsonIterator);
  IF sName = 'meta' THEN
    fbJson.CopyJson(jsonValue, sString, SIZEOF(sString));
  END_IF
  jsonIterator  := fbJson.NextMember(jsonIterator);
END_WHILE

Die Variable sString hat nach diesem Durchlauf folgenden Inhalt:

{"batteryVoltage":"1547mV","clickType":"SINGLE"}