function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Frank van Meegen 13Frank van Meegen 13 

How to generate JSON for a APEX REST Post callout

Thanks to the Trailhead module regarding APEX Rest callout I know how to post "mighty moose" to an endpoint ;-)

I am wondering how I can create and send a JSON string based on Salesforce fields. For example I want to send a case to an external system via a REST Post method with the following field mapping:
Ticket Number = CaseNumber
Ticket Status = Status
Ticket Priority = Priority

How would I change the request.setBody('{"name":"mighty moose"}'); line to succesfully generate the required JSON code for the external system?
Best Answer chosen by Frank van Meegen 13
Raj VakatiRaj Vakati
Sending From Apex Class : - 

Case c = [Select Id ,CaseNumber , Status ,Priority from Case Limit 1] ; 
JSONGenerator gen = JSON.createGenerator(true);    
	gen.writeStartObject();      
	gen.writeStringField('Ticket Number ', c.CaseNumber);
	gen.writeStringField('Ticket Status',c.Status);
	gen.writeStringField('Ticket Priority',c.Priority);
	gen.writeEndObject();    
	String jsonS = gen.getAsString();
System.debug('jsonMaterials'+jsonS);

// Sening the http body with JSON 

String endpoint = 'http://www.example.com/service';
HttpRequest req = new HttpRequest();
req.setEndpoint(endpoint);
req.setMethod('POST');
req.setbody(jsonS);
Http http = new Http();
HTTPResponse response = http.send(req); 
 
 
 Sending From Apex Trigger  : - 
 
 Case c = Trigger.new[0] ; 
JSONGenerator gen = JSON.createGenerator(true);    
	gen.writeStartObject();      
	gen.writeStringField('Ticket Number ', c.CaseNumber);
	gen.writeStringField('Ticket Status',c.Status);
	gen.writeStringField('Ticket Priority',c.Priority);
	gen.writeEndObject();    
	String jsonS = gen.getAsString();
System.debug('jsonMaterials'+jsonS);
String endpoint = 'http://www.example.com/service';
HttpRequest req = new HttpRequest();
req.setEndpoint(endpoint);
req.setMethod('POST');
req.setbody(jsonS);
Http http = new Http();
HTTPResponse response = http.send(req);

 

All Answers

Raj VakatiRaj Vakati
Hello , 

Use this code to generate the JSON object  
 
JSONGenerator gen = JSON.createGenerator(true);    
	
	gen.writeStartObject();      
	gen.writeStringField('Ticket Number ', '1234');
	gen.writeStringField('Ticket Status', 'New');
	gen.writeStringField('Sso_Id','502317323');
	gen.writeStringField('Ticket Priority','Priority');
	gen.writeEndObject();    
	 
	String jsonS = gen.getAsString();
System.debug('jsonMaterials'+jsonS);

// Sening the http body with JSON 

 request.setBody(jsonS );


 
Frank van Meegen 13Frank van Meegen 13
Thank you for your reply. What I do not understand is how I can put data from a case record in Salesforce as values in the Json string. The given solution has hard coded values instead of values from a Salesforce record.

I would like to achieve to send data from a Salesforce record to An external system when certain criteria are met, but cannot find an example anywhere. Can you help me with an example?
 
Raj VakatiRaj Vakati
Sending From Apex Class : - 

Case c = [Select Id ,CaseNumber , Status ,Priority from Case Limit 1] ; 
JSONGenerator gen = JSON.createGenerator(true);    
	gen.writeStartObject();      
	gen.writeStringField('Ticket Number ', c.CaseNumber);
	gen.writeStringField('Ticket Status',c.Status);
	gen.writeStringField('Ticket Priority',c.Priority);
	gen.writeEndObject();    
	String jsonS = gen.getAsString();
System.debug('jsonMaterials'+jsonS);

// Sening the http body with JSON 

String endpoint = 'http://www.example.com/service';
HttpRequest req = new HttpRequest();
req.setEndpoint(endpoint);
req.setMethod('POST');
req.setbody(jsonS);
Http http = new Http();
HTTPResponse response = http.send(req); 
 
 
 Sending From Apex Trigger  : - 
 
 Case c = Trigger.new[0] ; 
JSONGenerator gen = JSON.createGenerator(true);    
	gen.writeStartObject();      
	gen.writeStringField('Ticket Number ', c.CaseNumber);
	gen.writeStringField('Ticket Status',c.Status);
	gen.writeStringField('Ticket Priority',c.Priority);
	gen.writeEndObject();    
	String jsonS = gen.getAsString();
System.debug('jsonMaterials'+jsonS);
String endpoint = 'http://www.example.com/service';
HttpRequest req = new HttpRequest();
req.setEndpoint(endpoint);
req.setMethod('POST');
req.setbody(jsonS);
Http http = new Http();
HTTPResponse response = http.send(req);

 
This was selected as the best answer
Frank van Meegen 13Frank van Meegen 13
Great, thank you! This was exactly the example I was searching.
Susannah PSusannah P
Thank you Raj! I have been searching for this info and you answered it perfectly.
RPalRPal
Can someone please tell me how should I generate JSON for standard fields. I get error When i do it for standard or lookup fields:

Opportunity Opp = Trigger.new[0] ; 
JSONGenerator gen = JSON.createGenerator(true);    
    gen.writeStartObject();      
    gen.writeStringField('Agency Code', Opp.Agency_Code__c);
    gen.writeStringField('Account',Opp.Account);
    gen.writeStringField('Implementation Contact',Opp.Implementation_Contact__c);
    gen.writeStringField('Implementation Contact Email',Opp.Implementation_Contact__c.Email);
    gen.writeStringField('Implementation Contact ID',Opp.Implementation_Contact__c.Record_ID_full__c);
    gen.writeStringField('Opportunity Owner',Opp.Owner);
    gen.writeStringField('Opportunity Owner Email',Opp.Owner.Email;
    gen.writeStringField('Last Modified By Name',Opp.LastModifiedBy);
    gen.writeStringField('Opportunity ID',Opp.Record_ID_Full__c);
    gen.writeStringField('Account',Opp.Account);
    gen.writeStringField('Account',Opp.Account);
    gen.writeEndObject();    
    String jsonS = gen.getAsString();
System.debug('jsonMaterials'+jsonS);
String endpoint = 'http://www.example.com/service';
HttpRequest req = new HttpRequest();
req.setEndpoint(endpoint);
req.setMethod('POST');
req.setbody(jsonS);
Http http = new Http();
HTTPResponse response = http.send(req);

All the custom fields on opprtunity are working just fine but the lookup fields and standard field shows syntax error.
Syntax error
Can anyone suggets?
Bushra AnjumBushra Anjum
Hello All,
I have seen your discussion and you guys resolved the problem. It's really great and I am feeling good to see you that How helpful you all guys.
I also have a good tutorial about SSIS JSON.
Check this one also maybe it helps somebody.
vinod fnuvinod fnu
{"Line": [ {"Amount": 4.00,"DetailType": "SalesItemLineDetail","SalesItemLineDetail": {"ItemRef": {"value": "1","name": "Services"} }},{"Amount": 1.00,"DetailType": "SalesItemLineDetail","SalesItemLineDetail": {"ItemRef": {"value": "24","name": "trustee fees"} }}],"CustomerRef": {"value": "16"}}

the values are nested in jason .Is there a way to do for nesting jason input.
Rahul Kumar DeyRahul Kumar Dey
How to return generated JSON format string using @httpGet methot. (Remember I'm not talking about Post method)
Rahul Kumar DeyRahul Kumar Dey
@Vinod, do you find the solution?
I also want the JSON in nested format from a single object. See below,

Country__c: {
          'USA': {
                  Category__c: [
                        {
                            name:'Billing', [
                                     {
                                           Subcategory__c: "Billing1", Requirements__c: "Instruction1"
                                      }
                             ]
                        }
                  ]
            },
            'Canada': {
          
            },
            'Mexico': {

             }
}

Here is my DataModel:
sObject                        Fields                                             Type
Instructions__c :          Country__c                                     Picklist
                                    Category__c                                   Picklist
                                    Subcategory__c                             Picklist
                                    Requirements__c                           Long Text Area

Can anyone help me out to generate JSON in this format.

Here is my actual question:
https://trailblazer.salesforce.com/answers?id=9063A000000tJfeQAE#!/feedtype=SINGLE_QUESTION_DETAIL&dc=All&criteria=OPENQUESTIONS&id=9063A0000019ljVQAQ