(* Collection of code snippets by Arne Vajhøj *)
(* (from articles on eksperten.dk / vajhoej.dk written sometime between 2004 and now) *)
program TreeFundamentals;

uses
  flcJSON;

const
  json = '[ { "no" : 1, "name" : "Alan A", "role" : "Manager" }, ' +
           '{ "no" : 2, "name" : "Brian B", "role" : "Engineer" }, ' +
           '{ "no" : 3, "name" : "Chris C", "role" : "Sales rep" } ]';

var
  parser : TJSONParser;
  employees : TJSONArray;
  employee, newemployee : TJSONObject;
  name, role : widestring;
  no, i : integer;

begin
  parser := TJSONParser.Create();
  (* iterate over all employees *)
  employees := TJSONArray(parser.ParseText(json));
  for i := 0 to employees.Count - 1 do begin
     employee := TJSONObject(employees.Item[i]);
     (* find no, name and role *);
     no := employee.Item['no'].ValueInt;
     name := employee.Item['name'].ValueStr;
     role := employee.Item['role'].ValueStr;
     (* print *)
     writeln('no = ', no);
     writeln('name = ', name);
     writeln('role = ', role);
  end;
    (* add employee *)
  newemployee := TJSONObject.Create;
  newemployee.Add('no', TJSONInteger.Create(4));
  newemployee.Add('name', TJSONString.Create('Dave D'));
  newemployee.Add('role', TJSONString.Create('Intern'));
  employees.Append(newemployee);
  (* write out *)
  writeln(employees.GetJsonString());
  (* *)
  parser.Free;
  readln;
end.

