(* Collection of code snippets by Arne Vajhøj *)
(* (from articles on eksperten.dk / vajhoej.dk written sometime between 2004 and now) *)
[inherit('common','pJSON')]
program writejson_lib(input,output);

%include 'data.inc'

var
   o : array [1..3] of order;
   i, j : integer;
   orders, neworder, neworderline, temp : cJSON_ptr;
   json : array [1..1000] of pstr;
   n : integer;
   s : pstr;
   

begin
   %include 'init.inc'
   orders := pJSON_CreateArray;
   for i := 1 to 3 do begin
      neworder := pJSON_CreateObject;
      pJSON_AddItemToObject(neworder, 'id',  pJSON_CreateNumber(o[i].id));
      pJSON_AddItemToObject(neworder, 'customer',  pJSON_CreateString(o[i].customer));
      pJSON_AddItemToObject(neworder, 'status',  pJSON_CreateString(o[i].status));
      temp := pJSON_CreateArray;
      for j := 1 to o[i].nlines do begin
         neworderline := pJSON_CreateObject;
         pJSON_AddItemToObject(neworderline, 'item',  pJSON_CreateString(o[i].line[j].item));
         pJSON_AddItemToObject(neworderline, 'qty',  pJSON_CreateNumber(o[i].line[j].qty));
         pJSON_AddItemToObject(neworderline, 'price',  pJSON_CreateNumber(o[i].line[j].price / 100.00));
         pJSON_AddItemReferenceToArray(temp, neworderline);
      end;
      pJSON_AddItemToObject(neworder, 'orderLines',  temp);
      pJSON_AddItemReferenceToArray(orders, neworder);
   end;
   n := pJSON_Print(orders, json);
   for i := 1 to n do begin
      writeln(json[i]);
   end;
   pJSON_Delete(orders);
end.
