Sometimes there is a request for listed JSON .Say we have two objects Accounts and Contacts and we have requirement not to nest the response instead send as a collection with key for list of Accounts as Account and key for Contact as Contact.
Below is the JSON format thats expected output,
{
"Accounts": [
{
"attributes": {
"type": "Account",
"url": "/services/data/v25.0/sobjects/Account/001W0000006XDG9IAO"
},
"CreatedDate": "2012-08-09T08:29:43.000+0000",
"LastModifiedDate": "2012-08-09T15:24:42.000+0000",
"IsDeleted": true,
"Id": "001W0000006XDG9IAO"
},
{
"attributes": {
"type": "Account",
"url": "/services/data/v25.0/sobjects/Account/001W0000006XGEuIAO"
},
"CreatedDate": "2012-08-09T15:44:29.000+0000",
"LastModifiedDate": "2012-08-09T15:50:31.000+0000",
"IsDeleted": false,
"Id": "001W0000006XGEuIAO"
},
{
"attributes": {
"type": "Account",
"url": "/services/data/v25.0/sobjects/Account/001W0000006QtKyIAK"
},
"Phone": "12131",
"CreatedDate": "2012-08-02T14:46:48.000+0000",
"LastModifiedDate": "2012-08-09T15:43:20.000+0000",
"IsDeleted": true,
"Id": "001W0000006QtKyIAK"
},
{
"attributes": {
"type": "Account",
"url": "/services/data/v25.0/sobjects/Account/001W0000006XGI4IAO"
},
"CreatedDate": "2012-08-09T15:50:07.000+0000",
"LastModifiedDate": "2012-08-14T11:33:05.000+0000",
"FirstName": "Test",
"IsDeleted": false,
"Id": "001W0000006XGI4IAO",
"LastName": "Thomas"
},
{
"attributes": {
"type": "Account",
"url": "/services/data/v25.0/sobjects/Account/001W0000006XGIDIA4"
},
"CreatedDate": "2012-08-09T15:44:55.000+0000",
"LastModifiedDate": "2012-08-14T10:15:39.000+0000",
"FirstName": "shgdshg",
"IsDeleted": false,
"Id": "001W0000006XGIDIA4",
"LastName": "Hello"
},
{
"attributes": {
"type": "Account",
"url": "/services/data/v25.0/sobjects/Account/001W0000006XGhwIAG"
},
"CreatedDate": "2012-08-09T16:08:14.000+0000",
"LastModifiedDate": "2012-08-09T16:08:19.000+0000",
"FirstName": "deleted",
"IsDeleted": true,
"Id": "001W0000006XGhwIAG",
"LastName": "check"
},
"Contacts": [
{
"attributes": {
"type": "Contact",
"url": "/services/data/v25.0/sobjects/Contact/003W0000007mNoqIAE"
},
"AccountId": "001W0000006XGI4IAO",
"HCP__c": "001W0000006XGIDIA4",
"FirstName": "Test",
"IsDeleted": false,
"Id": "003W0000007mNoqIAE",
"LastName": "Thomas"
},
{
"attributes": {
"type": "Contact",
"url": "/services/data/v25.0/sobjects/Contact/003W0000007mNp1IAE"
},
"AccountId": "001W0000006XGIDIA4",
"HCP__c": "001W0000006XGEuIAO",
"FirstName": "shgdshg",
"IsDeleted": false,
"Id": "003W0000007mNp1IAE",
"LastName": "Hello"
},
{
"attributes": {
"type": "Contact",
"url": "/services/data/v25.0/sobjects/Contact/003W0000007mNpGIAU"
},
"Phone": "3213",
"AccountId": "001W0000006XGEuIAO",
"HCP__c": "001W0000006XGIDIA4",
"IsDeleted": false,
"Id": "003W0000007mNpGIAU",
"LastName": "ueiru"
},
{
"attributes": {
"type": "Contact",
"url": "/services/data/v25.0/sobjects/Contact/003W0000007wAkwIAE"
},
"Phone": "206-999-1111",
"AccountId": "001W0000006XJ3fIAG",
"Email": "mwells@ubermind.com",
"HCP__c": "001W0000006XGIDIA4",
"FirstName": "Mark",
"IsDeleted": false,
"Id": "003W0000007wAkwIAE",
"LastName": "Wells"
}
]}
For this we will have to use customized wrapping ,
Following is the source code that will automatically handle the generation of JSON in the expected format,
global class SFA_AccountContactListedResponse{
//Wrapper class to warp the various List as Super wrapper
global class supersobjectWrapper{
List Accounts=new List();//A list to hold the Accounts
List Contacts=new List();//A list to hold the Contacts
}
//This method will be called as the http get request
public static supersobjectWrapper makeResponseString(){
List lstacc=new List();
List lstcontacts=new List();
lstacc=[Select Id,CreatedDate,LastModifiedDate,Isdeleted from Acccount ];
lstcontacts=[Select id,CreatedDate,LastModifiedDate,Isdeleted from Contact];
supersobjectWrapper superWrap=new supersobjectWrapper();//Instantiating thesuperclass
superWrap.Contacts= lstcontacts ;
superWrap.Accounts= lstacc;
return superWrap;
}
}
The above class will be called as REST API using GET HTTP call,
@RestResource(urlMapping='/GetAcc/*')
global with sharing class SFA_ListedJsonGenerator{
@HttpGet
global static SFA_AccountGroupSyncManagerRevised.supersobjectWrapper returnJsonpacket(){
RestRequest req = RestContext.request;
SFA_AccountGroupSyncManagerRevised.supersobjectWrapper result;
result=SFA_AccountContactListedResponse.supersobjectWrapper;
return result;
}
}