C
C
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 C Downloads
#include <C_CkHttp.h>
#include <C_CkJsonObject.h>
#include <C_CkCsv.h>
void ChilkatSample(void)
{
BOOL success;
HCkHttp http;
const char *jsonStr;
HCkJsonObject json;
HCkCsv csv;
int numColumns;
int i;
int row;
int numRows;
int col;
success = FALSE;
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
http = CkHttp_Create();
// Get the JSON we'll be parsing..
jsonStr = CkHttp_quickGetStr(http,"https://www.chilkatsoft.com/exampleData/qb_customer_balance_detail_report_2.json");
if (CkHttp_getLastMethodSuccess(http) != TRUE) {
printf("%s\n",CkHttp_lastErrorText(http));
CkHttp_Dispose(http);
return;
}
json = CkJsonObject_Create();
CkJsonObject_Load(json,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 = CkCsv_Create();
CkCsv_putHasColumnNames(csv,TRUE);
// Set the column names of the CSV.
numColumns = CkJsonObject_SizeOfArray(json,"Columns.Column");
if (numColumns < 0) {
printf("Unable to get column names\n");
CkHttp_Dispose(http);
CkJsonObject_Dispose(json);
CkCsv_Dispose(csv);
return;
}
i = 0;
while (i < numColumns) {
CkJsonObject_putI(json,i);
CkCsv_SetColumnName(csv,i,CkJsonObject_stringOf(json,"Columns.Column[i].ColTitle"));
i = i + 1;
}
// Let's get the rows.
// We'll ignore the Header and Summary, and just get the data.
row = 0;
numRows = CkJsonObject_SizeOfArray(json,"Rows.Row[0].Rows.Row");
if (numRows < 0) {
printf("Unable to get data rows\n");
CkHttp_Dispose(http);
CkJsonObject_Dispose(json);
CkCsv_Dispose(csv);
return;
}
while (row < numRows) {
CkJsonObject_putI(json,row);
numColumns = CkJsonObject_SizeOfArray(json,"Rows.Row[0].Rows.Row[i].ColData");
col = 0;
while (col < numColumns) {
CkJsonObject_putJ(json,col);
CkCsv_SetCell(csv,row,col,CkJsonObject_stringOf(json,"Rows.Row[0].Rows.Row[i].ColData[j].value"));
col = col + 1;
}
row = row + 1;
}
// Show the CSV
printf("%s\n",CkCsv_saveToString(csv));
// Save to a CSV file
success = CkCsv_SaveFile(csv,"qa_output/customerDetailReport.csv");
CkHttp_Dispose(http);
CkJsonObject_Dispose(json);
CkCsv_Dispose(csv);
}