Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
QuickBooks - Parse the JSON of a Customer Balance Detail Report
See more CSV Examples
This example is to show how to parse the JSON of a particular Quickbooks report. The techniques shown here may help in parsing similar reports.The JSON to be parsed is available at Sample Quickbooks Customer Balance Detail Report JSON
Chilkat Pascal (Lazarus/Delphi) Downloads
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.Http,
Chilkat.JsonObject,
Chilkat.Csv;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
http: THttp;
jsonStr: string;
json: TJsonObject;
csv: TCsv;
numColumns: Integer;
i: Integer;
row: Integer;
numRows: Integer;
col: Integer;
begin
success := False;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
http := THttp.Create;
// Get the JSON we'll be parsing..
jsonStr := http.QuickGetStr('https://www.chilkatsoft.com/exampleData/qb_customer_balance_detail_report_2.json');
if (http.LastMethodSuccess <> True) then
begin
WriteLn(http.LastErrorText);
Exit;
end;
json := TJsonObject.Create;
json.Load(jsonStr);
// As an alternative to manually writing code, use this online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON
// Let's parse the JSON into a CSV, and then save to a CSV file.
csv := TCsv.Create;
csv.HasColumnNames := True;
// Set the column names of the CSV.
numColumns := json.SizeOfArray('Columns.Column');
if (numColumns < 0) then
begin
WriteLn('Unable to get column names');
Exit;
end;
i := 0;
while i < numColumns do
begin
json.I := i;
csv.SetColumnName(i,json.StringOf('Columns.Column[i].ColTitle'));
i := i + 1;
end;
// Let's get the rows.
// We'll ignore the Header and Summary, and just get the data.
row := 0;
numRows := json.SizeOfArray('Rows.Row[0].Rows.Row');
if (numRows < 0) then
begin
WriteLn('Unable to get data rows');
Exit;
end;
while row < numRows do
begin
json.I := row;
numColumns := json.SizeOfArray('Rows.Row[0].Rows.Row[i].ColData');
col := 0;
while col < numColumns do
begin
json.J := col;
csv.SetCell(row,col,json.StringOf('Rows.Row[0].Rows.Row[i].ColData[j].value'));
col := col + 1;
end;
row := row + 1;
end;
// Show the CSV
WriteLn(csv.SaveToString());
// Save to a CSV file
success := csv.SaveFile('qa_output/customerDetailReport.csv');
http.Free;
json.Free;
csv.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.