Skip to main content
Hello All,

I'm brand new to this and I'm having trouble with generating JSON.  

I am getting an error like "Cannot start array, expecting field name"

Please help!!!!

Here is what I'm trying to emulate:

{

  "RatingZip": "",

  "YearsInBusiness": "",

  "NatureOfBusiness": "",

  "IsNonProfit": "",

  "Product": "", REQUIRED

  "IsIncumbantAgent": "",

  "ClassCodeList": [

    {

      "ClassCode": "", REQUIRED

      "ClassDescriptionCode": "",

      "LocState": "", REQUIRED

      "Payroll": "", REQUIRED

      "FullTimeEmployees": "",

      "PartTimeEmployees": ""

    }

  ],

  "GenerateProposal": "",

  "LegalEntity": "",

  "Fein": "",

  "Applicant": { REQUIRED

    "BusinessName": "", REQUIRED

    "BusinessAddress1": "", REQUIRED

    "BusinessCity": "", REQUIRED

    "BusinessState": "", REQUIRED

    "BusinessZip": "", REQUIRED

    "MailingAddress1": "",

    "MailingCity": "",

    "MailingState": "",

    "MailingZip": "",

    "ContactInformation": { REQUIRED

      "FirstName": "", REQUIRED

      "LastName": "", REQUIRED

      "Email": "", REQUIRED

      "Phone": "" REQUIRED

    }

  },

  "Salutation": "",

  "CompanyWebsiteAddress": "",

  "EffectiveDate": "", REQUIRED

  "ExpiredPremium": ""

}

And here is my code:

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();

2 answers
  1. May 16, 2019, 1:29 AM
    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();

     
0/9000