jsonGetKey (Function)

Top  Previous  Next

Architecture:

NX32L

Device support:

All

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;