jsonGetKey (Function)

Top  Previous  Next

Architecture:

NX32L

Firmware version:

2.10.00


jsonGetKey returns the name and type of a value in a JSON object.

This can be used to determine which function to call when handling unknown values.

 

 

Input:

o : SYSHANDLE

A handle to a JSON structure.

 

idx : INT (Default 0)

The index of the value to examine, starting at 0.

 

Output:

key : STRING

The name of the value.

 

type : INT

The type of the value:

7

- Null.

6

- Boolean. Can be read using jsonSetValueBool.

5

- Floating point number.

4

- Integer.

3

- String.

2

- JSON Array.

1

- JSON Object.

 

 

Returns: INT

1

- Success

0

- Function is not supported.

-2

- JSON value not found.

-3

- Array element is not found, idx is outside the valid range

-4

- idx is not -1 and o is not an array

 

 

Declaration:

FUNCTION jsonGetKey : INT;
VAR_INPUT
   o     : SYSHANDLE;
   idx   : INT;
   key   : ACCESS STRING;
   type  : ACCESS INT;
END_VAR;

 

 

Example:

// Dumps JSON structure to device output
FUNCTION INTERFACE dumpJSON;
VAR_INPUT 
   json   : SYSHANDLE;
   prefix : STRING;
END_VAR;
END_FUNCTION;
 
// Dumps array to device output
FUNCTION dumpArray;
VAR_INPUT
   json   : SYSHANDLE;
   prefix : STRING;
END_VAR;
VAR
   type, i, rc : INT;
 
   tmp    : SYSHANDLE;
   key    : STRING;
   txt    : STRING;
   str    : STRING;
   d      : DINT;
   b      : BOOL;
   f      : DOUBLE;
END_VAR;
 
   FOR i := 0 TO jsonArraySize(o:=json) - 1 DO
      txt := strFormat(format:=prefix + "[\1]:", v1:=i);
      
      type := jsonGetType(o:=json, idx:= i);      
      CASE type OF 
         1,2:// Object or array
            DebugFmt(message:=txt);
            rc := jsonGetValue(o:=json, idx:=i, value := tmp);
            dumpJSON(json:=tmp, prefix := prefix);
            rc := jsonFree(o:=tmp);
         3: // string
            jsonGetString(o:=json, idx := i, value :=str);
            DebugFmt(message:=txt+":$""+str+"$"");
         4: // int
            jsonGetInt(o:=json, idx := i, value :=d);
            DebugFmt(message:=txt+":\4", v4:=d);
         5: // float
            jsonGetFloat(o:=json, idx := i, value :=f);
            DebugFmt(message:=txt+": "+doubleToStr(v:=f));
         6: // Bool
            jsonGetBool(o:=json, idx := i, value :=b);
            IF b THEN
               DebugFmt(message:=txt+": TRUE");
            ELSE
               DebugFmt(message:=txt+": FALSE");
            END_IF;
         7: //NULL
            DebugFmt(message:=txt+": NULL");
      END_CASE;
   END_FOR;
END_FUNCTION;
 
// Dumps object to device output
FUNCTION dumpObject;
VAR_INPUT
   json   : SYSHANDLE;
   prefix : STRING;
END_VAR;
VAR
   type, i, rc : INT;
 
   tmp    : SYSHANDLE;
   key    : STRING;
   txt    : STRING;
   str    : STRING;
   d      : DINT;
   b      : BOOL;
   f      : DOUBLE;
END_VAR;
 
   i := 0;
   REPEAT 
      rc := jsonGetKey(o:=json, idx:= i, key:=key, type:=type);
      txt := prefix + "$""+key+"$"";
      IF rc = 1 THEN            
         CASE type OF 
         1,2:// Object or array
            DebugFmt(message:=txt);
            rc := jsonGetValue(o:=json, key:=key, value := tmp);
            dumpJSON(json:=tmp, prefix := prefix);
            rc := jsonFree(o:=tmp);
            
         3: // string
            jsonGetString(o:=json, key:=key, value :=str);
            DebugFmt(message:=txt+":$""+str+"$"");
         4: // int
            jsonGetInt(o:=json, key:=key, value :=d);
            DebugFmt(message:=txt+":\4", v4:=d);           
         5: //Real
            jsonGetFloat(o:=json, key:=key, value :=f);
            DebugFmt(message:=txt+": "+doubleToStr(v:=f));   
         6: // Bool
            jsonGetBool(o:=json, key:=key, value :=b);
            IF b THEN
               DebugFmt(message:=txt+": TRUE");
            ELSE
               DebugFmt(message:=txt+": FALSE");
            END_IF;
         7: // NULL
            DebugFmt(message:=txt+": NULL");   
         END_CASE;
      END_IF;
      i := i+1;
   UNTIL  rc < 0
   END_REPEAT;
END_FUNCTION;
 
// Implementation of dumpJSON
FUNCTION IMPLEMENTATION dumpJSON;
VAR
   type: INT;
END_VAR;
   
   type := jsonGetType(o:=json, idx:=-1);
   IF type = 1 THEN // Object
      DebugFmt(message:=prefix+"object{");
      dumpObject(json:=json, prefix:=prefix+" ");   
      DebugFmt(message:=prefix+"}");
   END_IF;
   
   IF type = 2 THEN // Array
      DebugFmt(message:=prefix+"array[");
      dumpArray(json:=json, prefix:=prefix+" ");
      DebugFmt(message:=prefix+"]");
   END_IF;
      
END_FUNCTION;