
JSONGenerator gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeStringField('RatingZip', '');
gen.writeNumberField('YearsInBusiness', 0);
gen.writeStringField('NatureOfBusiness', '');
gen.writeBooleanField('IsNonProfit', false);
gen.writeStringField('Product', 'WC');
gen.writeBooleanField('IsIncumbantAgent', false);
gen.writeStringField('ClassCodeList', '');
gen.writeStartArray();
gen.writeStringField('ClassCode', i.Class_Code__c);
gen.writeStringField('ClassDescriptionCode', '');
gen.writeStringField('LocState', '');
gen.writeStringField('Payroll', i.Payroll__c);
gen.writeStringField('FullTimeEmployees', '');
gen.writeStringField('PartTimeEmployees', '');
gen.writeEndArray();
gen.writeBooleanField('GenerateProposal', true);
gen.writeNumberField('LegalEntity', 0);
gen.writeStringField('Fein', '');
gen.writeObjectField('Applicant', '');
gen.writeStartObject();
gen.writeStringField('BusinessName', i.Business_Name__c);
gen.writeStringField('BusinessAddress1', i.Business_Address__c);
gen.writeStringField('BusinessCity', i.Business_City__c);
gen.writeStringField('BusinessState', i.Business_State__c);
gen.writeStringField('BusinessZip', i.Business_Zip__c);
gen.writeStringField('MailingAddress1', '');
gen.writeStringField('MailingCity', '');
gen.writeStringField('MailingState', '');
gen.writeStringField('MailingZip', '');
gen.writeStartObject();
gen.writeObjectField('ContactInformation', '');
gen.writeStringField('FirstName', i.First_Name__c);
gen.writeStringField('LastName', i.Last_Name__c);
gen.writeStringField('Email', i.Email__c);
gen.writeStringField('Phone', i.Phone__c);
gen.writeEndObject();
gen.writeEndObject();
gen.writeStringField('Salutation', '');
gen.writeStringField('CompanyWebsiteAddress', '');
gen.writeStringField('EffectiveDate', i.Effective_Date__c);
gen.writeNumberField('ExpiredPremium', 0);
gen.writeEndObject();
Before gen.writeStartArray() you need to use gen.writeFieldName(). Here is an example that I eventually got to work after encountering that same error. JSONGenerator gen = JSON.createGenerator(true);
system.debug(invs.Name);
gen.writeStartObject();
gen.writeStringField('type', 'invoice');
gen.writeStringField('isDynamic', 'false');
gen.writeFieldName('columns');
gen.writeStartObject();
gen.writeObjectField('tranid', invs.Name);
gen.writeObjectField('companyid', invs.Project__r.Netsuite_Id__c);
gen.writeObjectField('trandate', nsService.formatDate(invs.Expected_Invoice_Date__c));
gen.writeObjectField('entity', invs.Project__r.Netsuite_Id__c);
gen.writeEndObject();
gen.writeFieldName('lines');
gen.writeStartObject();
gen.writeStringField('sublistId', 'item');
gen.writeFieldName('lineItems');
gen.writeStartArray();
for(Invoice_Line_Item__c ili : invs.Invoice_Line_Items__r) {
gen.writeStartObject();
gen.writeObjectField('quantity', ili.Quantity__c);
gen.writeObjectField('rate', ili.Sales_Price__c);
gen.writeObjectField('account', ili.Product__r.Netsuite_Product_Code__c);
gen.writeObjectField('item', i);
gen.writeEndObject();
i++;
}
gen.writeEndArray();
gen.writeEndObject();
gen.writeEndObject();