[SalesForce] Json Generator Object within Array

I'm using a json string generator for a POST request body from salesforce to a third party. I have an array within a larger object, and an object within that array, that is giving me an error. I have tried

         gen.writeFieldName('tasks');
        gen.writeStartArray();
            for (integer i = 0; i < sct.size(); i++){
                gen.writeString('"task":');
                gen.writeStartObject();
                gen.writeStringField('uuid', sct[i].TaskUUID__c);
                gen.writeEndObject();}
        gen.writeEndArray();

and this gives me a 422 error.

What i think i should have is:

         gen.writeFieldName('tasks');
        gen.writeStartArray();
            for (integer i = 0; i < sct.size(); i++){
                gen.writeFieldName('task');
                gen.writeStartObject();
                gen.writeStringField('uuid', sct[i].TaskUUID__c);
                gen.writeEndObject();}
        gen.writeEndArray();

but this gives me the following error 'Can not write field name expecting a value' – this is related to the 'gen.writeFieldName('task');' line

Can some one help me with why i'm getting this error?

Edit:

The request should look like

"tasks": [
{
"task": {
"uuid": "1e5c0b8d5a774b85a681d23a19c3f9c0",
}
}]

Best Answer

I think you're missing out on starting some of your objects, so it should be

gen.writeStartObject();
gen.writeFieldName('tasks');
        gen.writeStartArray();
            for (integer i = 0; i < sct.size(); i++){
                gen.writeStartObject();
                gen.writeFieldName('task');
                gen.writeStartObject();
                gen.writeStringField('uuid', sct[i].TaskUUID__c);
                gen.writeEndObject();
                gen.writeEndObject();}
        gen.writeEndArray();
gen.writeEndObject();

Remember everything is an object... The outermost level needs to be an object or array, and each element in your tasks array needs to be an object or array. In your original code, you were trying to populate the array with something like a list of mappings, but those mappings must be inside an object.

<-- Not sure if that makes it more, or less, clear!

Related Topic