Tuesday, 22 January 2013

JSON.serialize in APEX after launch of API 27.0(Spring 13)


These days i spend lot of time on Stackexchange  for salesforce.This has been amazing site for salesforce queries related to admin or development .

Very interesting changes after API 27.0 was launched in JSON.serialize system method of salesforce .This method is used to convert the apex objects (primitive or User defined ) into the JSON string format.Quite helpful in integration if structure of JSON is pretty simple then forming apex class and using JSON.serialize helps to get the JSON body for making the POST call to the external system.

There are some changes on how this behaves after launch of the Spring 13 API.Here is the reference to the stackexchange links from where i gathered this information and thought of blogging so that it may help others.

http://salesforce.stackexchange.com/questions/6192/json-serialize-method-not-returning-null-fields

http://salesforce.stackexchange.com/questions/7493/json-serialize-is-not-working-in-winter-13

So i thought of experimenting on this with the small test code

Here is the code

The first query pulls an account that has fax ,website field with no data .In short these are null for the Account thats considered in the below example

public class dummy{

    public static void dummytest(){
    Account acc= [Select Name, id, Fax, Website from account where id ='001Z000000J0w5C'];
    system.debug('JSON OF OBJECT FROM SALESFORCE SCHEMA'+JSON.Serialize(acc));
    
    dummywrapp dmy= new dummywrapp();
    dmy.Name='Test';    
    System.debug('JSON FROM APEX CREATED OBJECT'+JSON.serialize(dmy));
    }
    
    public class dummywrapp{
    
    public string Name;
    public string Location;
    
        }

}


DEBUG LOG
_________



21:23:17:122 USER_DEBUG [5]|DEBUG|JSON OF OBJECT FROM SALESFORCE SCHEMA{"attributes":{"type":"Account","url":"/services/data/v26.0/sobjects/Account/0019000000KANkZAAX"},"Name":"Mobile Test","Id":"0019000000KANkZAAX"}


21:23:17:124 USER_DEBUG [9]|DEBUG|JSON FROM APEX CREATED OBJECT{"Name":"Test","Location":null}


The following conclusion can be drawn looking at the debug log.

 When using JSON.serialize with objects bounded to apex schema if the field has blank values the KEY and Value in output of JSON is ignored While same does not hold good for objects formed through class formation from apex. 

 Not sure if in future salesforce changes this but certainly this information is good to know when we are integrating any system that uses JSON to communicate and if JSON.serialize is the mechanism to generate the JSON.

 Play safe with JSONserialize() method !

References

http://salesforce.stackexchange.com/questions/6192/json-serialize-method-not-returning-null-fields

Introducing Lightning Base Components

Lightning Base Components are great addition to the platform and in fact revolutionary .One of the concerns around lightning component ...