I have getting the below JSON on using JSON.serialize
[ {
"lname" : "Singh",
"hcpZipCode" : null,
"hcpState" : null,
"hcpEmail" : "test@test.com",
"hcpCity" : null,
"hcpAddLine1" : null,
"fname" : "Abhey",
"countryCode" : "AUS"
} ]
I don't know why this '[' is coming at the begining.I don't need this '[' at the begining due to which I am getting System.JSONException: Malformed JSON: Expected '{' at the beginning of object
code
public PageReference step2() {
string JSONstr='';
List<HCPRequest> conWrapList = new List<HCPRequest>();
HCPRequest tempcontactWrapper = new HCPRequest();
tempcontactWrapper.fname='Abhey';
tempcontactWrapper.lname='Singh';
tempcontactWrapper.countryCode='AUS';
tempcontactWrapper.hcpEmail=contact.Email;
conWrapList.add(tempcontactWrapper);
JSONstr = JSON.serializePretty(conWrapList);
System.debug('\n******'+JSONstr +'\n******');
String clientId = 'xy';
String clientSecret = 'x';
//We can also store our username password in custom setting.
String username='x';//salesforce username
String password='x';//password+securitytoken
// Generating the Access Token
HttpRequest req = new HttpRequest();
req.setMethod('POST');
req.setEndpoint('https://test.salesforce.com/services/oauth2/token');// this is the OAuth endpoint where this request will be hit
req.setBody('grant_type=password&client_id='+clientId+'&client_secret='+clientSecret+'&username='+username+'&password='+password);
Http http = new Http();
HTTPResponse res = http.send(req);
String str = res.getBody();
wrapObj = (Wrapper)Json.deserialize(str,Wrapper.class);
accessToken = wrapObj.access_token;
instanceUrl = wrapObj.instance_url;
HttpRequest req1 = new HttpRequest();
string response='';
req1.setMethod('POST');
//req.setEndpoint(wrapObj.instance_url+'/services/apexrest/Account/getAccountById?name=champaKAli');
string EndPt = 'y';
string email='test@test.com';
req1.setEndpoint(EndPt);
req1.setHeader('Authorization', 'OAuth '+wrapObj.access_token);
req1.setHeader('Content-Type', 'application/json');
//req1.setBody('{"request":{"lname" : "Singh","hcpZipCode" : null,"hcpState" : null,"hcpEmail" : "test@test.com","hcpCity" : null,"hcpAddLine1" : null,"fname" : "Abhey","countryCode" : "AUS"}}');
req1.setBody('{"request":'+JSON.Serialize(conWrapList)+'}');
//req.setBody('{"request": {"countryCode": "AUS","hcpEmail" : ""+email}}');
//req.setTimeout(60000);
//req.setHeader('Content-Length', '0');
Http http1 = new Http();
HTTPResponse res1 = http1.send(req1);
System.debug('***Response***** ' + res1.getBody());
if(res1.getBody()!=null)
{
response=res1.getBody();
HCPResponse saj=(HCPResponse)JSON.deserialize(response,HCPResponse.class);
System.debug('***Response came full***** ' + saj);
System.debug('***Response came***** ' + saj.accList);
for(HCPResponseDetail s :saj.accList)
{
System.debug('***Response email***** ' + s.hcpEmail);
System.debug('***Response add2***** ' + s.hcpAddrLine2);
contact.Address1_Line2__c=s.hcpAddrLine2;
}
//return response;
//string methodcall=methodGet(JSONstr);
return Page.opptyStep2CustomReg;
}
Best Answer
You asked it to serialize a list, which is going to produce an array in json.
If you don't want a json array, just pass serialize an object instead of a list, e.g.