JSONDecode, decodes a JSON object

Home / Knowledge Base / Manualistica / Programmazione IEC 61131-3 / Libreria comunicazione HTTP / JSONDecode, decodes a JSON object

Questo blocco funzione effettua la decodifica di un oggetto JSON estraendo la variabile definuita. Il FB ha esecuzione atomica, può essere eseguito come una funzione.

Eseguendo il FB se nell'oggetto JSON definito in Object è presente la variabile definita in Name il suo valore verrà trasferito nel buffer definito in VAddress secondo il tipo definito in VType. Se la variabile è scalare Count sarà impostato a 1, se è un array occorre definire il numero degli elementi di cui è composto l'array.

In ECode viene ritornato l'eventuale codice errore di esecuzione.

Function block
CODESYS: Non disponibile
LogicLab: eLLabHTTPLib

Object (@STRING) Indirizzo stringa definizione oggetto JSON. Nota: L'oggetto deve essere una stringa JSON che inizia con { e termina con }.

Name (@STRING) Definizione nome variabile di cui estrarre il valore dall'oggetto.

VType (VR_TYPE) Tipo variabile di cui estrarre valore (Vedi definizione).

VAddress (@BYTE) Indirizzo appoggio valore estratto.

Count (UDINT) Se variabile scalare impostare 1. Se variabile array definire numero elementi.

Size (UDINT) Definizione dimensione buffer di stringa valore variabile. Occorre definirlo solo se
VType:=STRING_TYPE, si può omettere in tutti gli altri casi.

ECode (USINT) Codice errore esecuzione
0: Nessun errore.
1: Oggetto JSON non inizia con “{“.
2: Oggetto JSON non finisce con “{“.
3: Nome variabile cercata troppo lungo.
4: Variabile non presente in oggetto JSON.
10...60: Errore in decodifica valore variabile.

Esempi

Come utilizzare gli esempi.
Sono riportati alcuni esempi di decodifica oggetti JSON, viene estratto il valore di diversi tipi di variabili per illustrare come utilizzare il FB.

Rimando al FB RESTClient per altri esempi di utilizzo.

LogicLab (Ptp156)
PROGRAM ST_JSONDecode
VAR
    BValue : BOOL; (* Boolean value *)
    RVariable : REAL; (* Real variable *)
    SVariable : UDINT; (* Scalar variable *)
    JSONObject : STRING[ 64 ]; (* JSON object *)
    AVariable : ARRAY[0..2] OF UINT; (* Array variable *)
    SSValue : STRING[ 16 ]; (* Scalar string value *)
    AString : ARRAY[0..2] OF @STRING;(* Array string *)
    i : UDINT; (* Auxiliary variable *)
    A1String : STRING[ 8 ]; (* Scalar string value [1] *)
    A2String : STRING[ 8 ]; (* Scalar string value [2] *)
    A3String : STRING[ 8 ]; (* Scalar string value [3] *)
    JDecode : JSONDecode_v2; (* JSON decode *)
END_VAR

// ****************************************************************************
// PROGRAM "ST_JSONDecode"
// ****************************************************************************
// Some JSON object decode examples.
// ----------------------------------------------------------------------------

    // ------------------------------------------------------------------------
    // JSON OBJECT DECODE
    // ------------------------------------------------------------------------
    // Decode a boolean JSON object.

    JSONObject:='{"BValue":true}';
    JDecode(Object:=ADR(JSONObject), Name:=ADR('BValue'), VType:=BOOL_TYPE, VAddress:=ADR(BValue), Count:=1);

    // Decode a numeric JSON object.

    JSONObject:='{"SVariable":123}';
    JDecode(Object:=ADR(JSONObject), Name:=ADR('SVariable'), VType:=UDINT_TYPE, VAddress:=ADR(SVariable), Count:=1);

    // Decode a real JSON object.

    JSONObject:='{"RVariable":12.122}';
    JDecode(Object:=ADR(JSONObject), Name:=ADR('RVariable'), VType:=REAL_TYPE, VAddress:=ADR(RVariable), Count:=1);

    // Decode a string JSON object.

    JSONObject:='{"SString":"Hello [!]"}';
    JDecode(Object:=ADR(JSONObject), Name:=ADR('SString'), VType:=STRING_TYPE, VAddress:=ADR(SSValue), Count:=1, Size:=SIZEOF(SSValue));

    // Decode a numeric array JSON object.

    JSONObject:='{"AVariable":[123, 456, 789]}';
    JDecode(Object:=ADR(JSONObject), Name:=ADR('AVariable'), VType:=UINT_TYPE, VAddress:=ADR(AVariable), Count:=3);

    // Decode a string array JSON object.

    AString[0]:=ADR(A1String); // Address of 1st array value
    AString[1]:=ADR(A2String); // Address of 2nd array value
    AString[2]:=ADR(A3String); // Address of 3rd array value
    JSONObject:='{"AString":["Is One", "Is [2]", "Three"]}';
    JDecode(Object:=ADR(JSONObject), Name:=ADR('AString'), VType:=STRING_TYPE, VAddress:=ADR(AString), Count:=3, Size:=8);

// [End of file]

Ti è stato utile questo articolo ?