Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Check if Integer Exists at JSON Path

Demonstrates how to get an integer value at a JSON path, and how to check to see if it exists.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.JsonObject;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  json: TJsonObject;
  path: string;
  val: Integer;
  wasFound: Boolean;

begin
  success := False;

  json := TJsonObject.Create;

  //  First build simple JSON..
  json.UpdateInt('test.abc',100);

  json.EmitCompact := False;
  WriteLn(json.Emit());

  //  This is our JSON:
  //  {
  //    "test": {
  //      "abc": 100,
  //    }
  //  }

  path := 'test.notHere';

  //  The call to IntOf will return 0, because it's not present.
  //  But how do we know if it really was present, and the value was truly 0?
  val := json.IntOf(path);
  WriteLn('val = ' + val);

  //  We cannot use LastMethodSuccess because LastMethodSuccess only applies
  //  to methods that:
  //  - return a string
  //  - return a new Chilkat object, binary bytes, or a date/time.
  //  - returns a boolean status where True = success and False = failed.
  //  - returns an integer where failure is defined by a return value less than zero.
  //  The IntOf method fits none of these requirements, and therefore the LastMethodSuccess 
  //  is not a valid indicator..
  wasFound := json.LastMethodSuccess;
  WriteLn('wasFound = ' + wasFound + ' (not a valid indicator)');

  //  Instead, if the returned value is 0, we can double-check to see if the member was truly there..
  if (val = 0) then
    begin
      wasFound := json.HasMember(path);
      WriteLn('wasFound = ' + wasFound);
      if (wasFound = True) then
        begin
          WriteLn('The value was present and is 0.');
        end
      else
        begin
          WriteLn('no member is present at test.notHere');
        end;
    end
  else
    begin
      WriteLn('val = ' + val);
    end;

  //  Alternatively, you could check to see if the member exists beforehand..
  if (json.HasMember(path) = True) then
    begin
      WriteLn('val = ' + json.IntOf(path));
    end
  else
    begin
      WriteLn('no member at ' + path);
    end;


  json.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.