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 Listas 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; } }
Hi ,
ReplyDeleteI had an query with json response tags, in the above example , though we have queried only for
lstacc=[Select Id,CreatedDate,LastModifiedDate,Isdeleted from Acccount ];
we get extra tags in the output
{
"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"
}
is there any way not to print , type and url attribute in response , and return only for the queried fields in output ?