JSON.serialize: is it possible to suppress null values of a map? The 2019 Stack Overflow Developer Survey Results Are InJSON.Serialize method not returning null fields (part deux)Apex JSON.serialize() with null values (RELOADED)Deserialize JSON to SObjectSerializes STRING into JSON FormatChanging map key valuesKeep null values in Remote JSON callError initializing mapJSON serialize SObject including fields with null valueschange key values of maphow to display picklist values which is stored in custom settings values based on the condition

Inline version of a function returns different value then non-inline version

Information to fellow intern about hiring?

How to manage monthly salary

How did the USSR manage to innovate in an environment characterized by government censorship and high bureaucracy?

Spanish for "widget"

Geography at the pixel level

Can I buy Keisei train tickets with international debit card?

Extreme, but not acceptable situation and I can't start the work tomorrow morning

Is this food a bread or a loaf?

How to make payment on the internet without leaving a money trail?

Dual Citizen. Exited the US on Italian passport recently

Poison Arrows Piercing damage reduced to 0, do you still get poisoned?

Is bread bad for ducks?

Access elements in std::string where positon of string is greater than its size

Is std::next for vector O(n) or O(1)?

Can one use the reaction spell from the War Caster feat to cast Bigby's Hand?

Landlord wants to switch my lease to a "Land contract" to "get back at the city"

What do the Banks children have against barley water?

Is it worth rebuilding a wheel myself to save money?

JSON.serialize: is it possible to suppress null values of a map?

How could a lack of term limits lead to a "dictatorship?"

Is there a name of the flying bionic bird?

What tool would a Roman-age civilisation use to reduce/breakup silver and other metals?

Why do UK politicians seemingly ignore opinion polls on Brexit?



JSON.serialize: is it possible to suppress null values of a map?



The 2019 Stack Overflow Developer Survey Results Are InJSON.Serialize method not returning null fields (part deux)Apex JSON.serialize() with null values (RELOADED)Deserialize JSON to SObjectSerializes STRING into JSON FormatChanging map key valuesKeep null values in Remote JSON callError initializing mapJSON serialize SObject including fields with null valueschange key values of maphow to display picklist values which is stored in custom settings values based on the condition



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








2















I tried to serialize a map with null value (api 45):



Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
System.debug(JSON.serialize(bodyMap,true));


but it does not suppress null value (as it does in a custom object):



"key2":null,"key":"value"


Does it work as expected? Is there any other way than writing custom serialiser?










share|improve this question






















  • I don't believe that there is a way other than a custom serializer that you can use. Out the box JSON methods will take what they have an serialize it as is . With a custom serializer you will have the option of supplying a replacement for a null value.

    – Ronnie
    2 hours ago











  • This method serialize(objectToSerialize, suppressApexObjectNulls) seems to work specifically on Apex Object types only and that the platform considers a Collection to be distinct from an Apex Object.

    – Jayant Das
    2 hours ago











  • @JayantDas True. Same behaviour with List.

    – kvor
    2 hours ago











  • @kvor Even though it does not clearly calls out, but going through few references it does establish this distinction, I have added details as answer, if that helps.

    – Jayant Das
    2 hours ago

















2















I tried to serialize a map with null value (api 45):



Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
System.debug(JSON.serialize(bodyMap,true));


but it does not suppress null value (as it does in a custom object):



"key2":null,"key":"value"


Does it work as expected? Is there any other way than writing custom serialiser?










share|improve this question






















  • I don't believe that there is a way other than a custom serializer that you can use. Out the box JSON methods will take what they have an serialize it as is . With a custom serializer you will have the option of supplying a replacement for a null value.

    – Ronnie
    2 hours ago











  • This method serialize(objectToSerialize, suppressApexObjectNulls) seems to work specifically on Apex Object types only and that the platform considers a Collection to be distinct from an Apex Object.

    – Jayant Das
    2 hours ago











  • @JayantDas True. Same behaviour with List.

    – kvor
    2 hours ago











  • @kvor Even though it does not clearly calls out, but going through few references it does establish this distinction, I have added details as answer, if that helps.

    – Jayant Das
    2 hours ago













2












2








2








I tried to serialize a map with null value (api 45):



Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
System.debug(JSON.serialize(bodyMap,true));


but it does not suppress null value (as it does in a custom object):



"key2":null,"key":"value"


Does it work as expected? Is there any other way than writing custom serialiser?










share|improve this question














I tried to serialize a map with null value (api 45):



Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
System.debug(JSON.serialize(bodyMap,true));


but it does not suppress null value (as it does in a custom object):



"key2":null,"key":"value"


Does it work as expected? Is there any other way than writing custom serialiser?







apex json null serialize






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked 2 hours ago









kvorkvor

714




714












  • I don't believe that there is a way other than a custom serializer that you can use. Out the box JSON methods will take what they have an serialize it as is . With a custom serializer you will have the option of supplying a replacement for a null value.

    – Ronnie
    2 hours ago











  • This method serialize(objectToSerialize, suppressApexObjectNulls) seems to work specifically on Apex Object types only and that the platform considers a Collection to be distinct from an Apex Object.

    – Jayant Das
    2 hours ago











  • @JayantDas True. Same behaviour with List.

    – kvor
    2 hours ago











  • @kvor Even though it does not clearly calls out, but going through few references it does establish this distinction, I have added details as answer, if that helps.

    – Jayant Das
    2 hours ago

















  • I don't believe that there is a way other than a custom serializer that you can use. Out the box JSON methods will take what they have an serialize it as is . With a custom serializer you will have the option of supplying a replacement for a null value.

    – Ronnie
    2 hours ago











  • This method serialize(objectToSerialize, suppressApexObjectNulls) seems to work specifically on Apex Object types only and that the platform considers a Collection to be distinct from an Apex Object.

    – Jayant Das
    2 hours ago











  • @JayantDas True. Same behaviour with List.

    – kvor
    2 hours ago











  • @kvor Even though it does not clearly calls out, but going through few references it does establish this distinction, I have added details as answer, if that helps.

    – Jayant Das
    2 hours ago
















I don't believe that there is a way other than a custom serializer that you can use. Out the box JSON methods will take what they have an serialize it as is . With a custom serializer you will have the option of supplying a replacement for a null value.

– Ronnie
2 hours ago





I don't believe that there is a way other than a custom serializer that you can use. Out the box JSON methods will take what they have an serialize it as is . With a custom serializer you will have the option of supplying a replacement for a null value.

– Ronnie
2 hours ago













This method serialize(objectToSerialize, suppressApexObjectNulls) seems to work specifically on Apex Object types only and that the platform considers a Collection to be distinct from an Apex Object.

– Jayant Das
2 hours ago





This method serialize(objectToSerialize, suppressApexObjectNulls) seems to work specifically on Apex Object types only and that the platform considers a Collection to be distinct from an Apex Object.

– Jayant Das
2 hours ago













@JayantDas True. Same behaviour with List.

– kvor
2 hours ago





@JayantDas True. Same behaviour with List.

– kvor
2 hours ago













@kvor Even though it does not clearly calls out, but going through few references it does establish this distinction, I have added details as answer, if that helps.

– Jayant Das
2 hours ago





@kvor Even though it does not clearly calls out, but going through few references it does establish this distinction, I have added details as answer, if that helps.

– Jayant Das
2 hours ago










3 Answers
3






active

oldest

votes


















7














Yep, that's the expected behavior.



For simple maps, you can get rid of null values by iterating over the map keys, keeping track of which ones have null values, and then a little map manipulation.



Set<String> mapKeysToRemoveSet = new Set<String>();

for(String key :myMap.keySet())
if(myMap.get(key) == null)
mapKeysToRemoveSet.add(key);



// The Map class only comes with a remove() method, which only removes one item from the
// map at a time.
// It's not a great idea to modify a collection while you're iterating over it.
// The solution is to get the map's keyset, then use the set class's removeAll() method.
// This has the effect of removing multiple items from the map in one shot.
myMap.keySet().removeAll(mapKeysToRemoveSet);

System.debug(JSON.serialize(myMap));





share|improve this answer






























    2














    The documentation for JSON.serialize(objectToSerialize, suppressApexObjectNulls)
    mentions the type of objectToSerialize parameter as:




    Type: Object



    The Apex object to serialize.




    And if you refer to other documentations (mentioned below), a Collection is always categorized differently than an Apex Object. Apex Object always refers to instances of custom/system classes within the platform.



    So the behavior what you are experiencing is expected. Your option is to either go with a custom class or serialize only after removing the null values from the collection.




    References for data types in Apex which mentions Collection differently than Apex Objects:



    • Data Types

    • Expressions





    share|improve this answer






























      0














      This is a problem which I had faced, and I came across a string manipulation method that strips out nulls from null json keys.



       public static string stripJsonNulls(string JsonString)


      if(JsonString != null)

      JsonString = JsonString.replaceAll('"[^"]*":null',''); //basic removeal of null values
      JsonString = JsonString.replaceAll(',2,', ','); //remove duplicate/multiple commas
      JsonString = JsonString.replace(',', ''); //prevent opening brace from having a comma after it
      JsonString = JsonString.replace(',', ''); //prevent closing brace from having a comma before it
      JsonString = JsonString.replace('[,', '['); //prevent opening bracket from having a comma after it
      JsonString = JsonString.replace(',]', ']'); //prevent closing bracket from having a comma before it


      return JsonString;



      Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
      System.debug(stripJsonNulls(JSON.serialize(bodyMap,false)));


      OP : "key":"value"



      Src: https://iwritecrappycode.wordpress.com/2014/07/16/stripping-nulls-from-a-json-object-in-apex/






      share|improve this answer























        Your Answer








        StackExchange.ready(function()
        var channelOptions =
        tags: "".split(" "),
        id: "459"
        ;
        initTagRenderer("".split(" "), "".split(" "), channelOptions);

        StackExchange.using("externalEditor", function()
        // Have to fire editor after snippets, if snippets enabled
        if (StackExchange.settings.snippets.snippetsEnabled)
        StackExchange.using("snippets", function()
        createEditor();
        );

        else
        createEditor();

        );

        function createEditor()
        StackExchange.prepareEditor(
        heartbeatType: 'answer',
        autoActivateHeartbeat: false,
        convertImagesToLinks: false,
        noModals: true,
        showLowRepImageUploadWarning: true,
        reputationToPostImages: null,
        bindNavPrevention: true,
        postfix: "",
        imageUploader:
        brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
        contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
        allowUrls: true
        ,
        onDemand: true,
        discardSelector: ".discard-answer"
        ,immediatelyShowMarkdownHelp:true
        );



        );













        draft saved

        draft discarded


















        StackExchange.ready(
        function ()
        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f257158%2fjson-serialize-is-it-possible-to-suppress-null-values-of-a-map%23new-answer', 'question_page');

        );

        Post as a guest















        Required, but never shown

























        3 Answers
        3






        active

        oldest

        votes








        3 Answers
        3






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        7














        Yep, that's the expected behavior.



        For simple maps, you can get rid of null values by iterating over the map keys, keeping track of which ones have null values, and then a little map manipulation.



        Set<String> mapKeysToRemoveSet = new Set<String>();

        for(String key :myMap.keySet())
        if(myMap.get(key) == null)
        mapKeysToRemoveSet.add(key);



        // The Map class only comes with a remove() method, which only removes one item from the
        // map at a time.
        // It's not a great idea to modify a collection while you're iterating over it.
        // The solution is to get the map's keyset, then use the set class's removeAll() method.
        // This has the effect of removing multiple items from the map in one shot.
        myMap.keySet().removeAll(mapKeysToRemoveSet);

        System.debug(JSON.serialize(myMap));





        share|improve this answer



























          7














          Yep, that's the expected behavior.



          For simple maps, you can get rid of null values by iterating over the map keys, keeping track of which ones have null values, and then a little map manipulation.



          Set<String> mapKeysToRemoveSet = new Set<String>();

          for(String key :myMap.keySet())
          if(myMap.get(key) == null)
          mapKeysToRemoveSet.add(key);



          // The Map class only comes with a remove() method, which only removes one item from the
          // map at a time.
          // It's not a great idea to modify a collection while you're iterating over it.
          // The solution is to get the map's keyset, then use the set class's removeAll() method.
          // This has the effect of removing multiple items from the map in one shot.
          myMap.keySet().removeAll(mapKeysToRemoveSet);

          System.debug(JSON.serialize(myMap));





          share|improve this answer

























            7












            7








            7







            Yep, that's the expected behavior.



            For simple maps, you can get rid of null values by iterating over the map keys, keeping track of which ones have null values, and then a little map manipulation.



            Set<String> mapKeysToRemoveSet = new Set<String>();

            for(String key :myMap.keySet())
            if(myMap.get(key) == null)
            mapKeysToRemoveSet.add(key);



            // The Map class only comes with a remove() method, which only removes one item from the
            // map at a time.
            // It's not a great idea to modify a collection while you're iterating over it.
            // The solution is to get the map's keyset, then use the set class's removeAll() method.
            // This has the effect of removing multiple items from the map in one shot.
            myMap.keySet().removeAll(mapKeysToRemoveSet);

            System.debug(JSON.serialize(myMap));





            share|improve this answer













            Yep, that's the expected behavior.



            For simple maps, you can get rid of null values by iterating over the map keys, keeping track of which ones have null values, and then a little map manipulation.



            Set<String> mapKeysToRemoveSet = new Set<String>();

            for(String key :myMap.keySet())
            if(myMap.get(key) == null)
            mapKeysToRemoveSet.add(key);



            // The Map class only comes with a remove() method, which only removes one item from the
            // map at a time.
            // It's not a great idea to modify a collection while you're iterating over it.
            // The solution is to get the map's keyset, then use the set class's removeAll() method.
            // This has the effect of removing multiple items from the map in one shot.
            myMap.keySet().removeAll(mapKeysToRemoveSet);

            System.debug(JSON.serialize(myMap));






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered 2 hours ago









            Derek FDerek F

            20.9k52353




            20.9k52353























                2














                The documentation for JSON.serialize(objectToSerialize, suppressApexObjectNulls)
                mentions the type of objectToSerialize parameter as:




                Type: Object



                The Apex object to serialize.




                And if you refer to other documentations (mentioned below), a Collection is always categorized differently than an Apex Object. Apex Object always refers to instances of custom/system classes within the platform.



                So the behavior what you are experiencing is expected. Your option is to either go with a custom class or serialize only after removing the null values from the collection.




                References for data types in Apex which mentions Collection differently than Apex Objects:



                • Data Types

                • Expressions





                share|improve this answer



























                  2














                  The documentation for JSON.serialize(objectToSerialize, suppressApexObjectNulls)
                  mentions the type of objectToSerialize parameter as:




                  Type: Object



                  The Apex object to serialize.




                  And if you refer to other documentations (mentioned below), a Collection is always categorized differently than an Apex Object. Apex Object always refers to instances of custom/system classes within the platform.



                  So the behavior what you are experiencing is expected. Your option is to either go with a custom class or serialize only after removing the null values from the collection.




                  References for data types in Apex which mentions Collection differently than Apex Objects:



                  • Data Types

                  • Expressions





                  share|improve this answer

























                    2












                    2








                    2







                    The documentation for JSON.serialize(objectToSerialize, suppressApexObjectNulls)
                    mentions the type of objectToSerialize parameter as:




                    Type: Object



                    The Apex object to serialize.




                    And if you refer to other documentations (mentioned below), a Collection is always categorized differently than an Apex Object. Apex Object always refers to instances of custom/system classes within the platform.



                    So the behavior what you are experiencing is expected. Your option is to either go with a custom class or serialize only after removing the null values from the collection.




                    References for data types in Apex which mentions Collection differently than Apex Objects:



                    • Data Types

                    • Expressions





                    share|improve this answer













                    The documentation for JSON.serialize(objectToSerialize, suppressApexObjectNulls)
                    mentions the type of objectToSerialize parameter as:




                    Type: Object



                    The Apex object to serialize.




                    And if you refer to other documentations (mentioned below), a Collection is always categorized differently than an Apex Object. Apex Object always refers to instances of custom/system classes within the platform.



                    So the behavior what you are experiencing is expected. Your option is to either go with a custom class or serialize only after removing the null values from the collection.




                    References for data types in Apex which mentions Collection differently than Apex Objects:



                    • Data Types

                    • Expressions






                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered 2 hours ago









                    Jayant DasJayant Das

                    18.1k21330




                    18.1k21330





















                        0














                        This is a problem which I had faced, and I came across a string manipulation method that strips out nulls from null json keys.



                         public static string stripJsonNulls(string JsonString)


                        if(JsonString != null)

                        JsonString = JsonString.replaceAll('"[^"]*":null',''); //basic removeal of null values
                        JsonString = JsonString.replaceAll(',2,', ','); //remove duplicate/multiple commas
                        JsonString = JsonString.replace(',', ''); //prevent opening brace from having a comma after it
                        JsonString = JsonString.replace(',', ''); //prevent closing brace from having a comma before it
                        JsonString = JsonString.replace('[,', '['); //prevent opening bracket from having a comma after it
                        JsonString = JsonString.replace(',]', ']'); //prevent closing bracket from having a comma before it


                        return JsonString;



                        Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
                        System.debug(stripJsonNulls(JSON.serialize(bodyMap,false)));


                        OP : "key":"value"



                        Src: https://iwritecrappycode.wordpress.com/2014/07/16/stripping-nulls-from-a-json-object-in-apex/






                        share|improve this answer



























                          0














                          This is a problem which I had faced, and I came across a string manipulation method that strips out nulls from null json keys.



                           public static string stripJsonNulls(string JsonString)


                          if(JsonString != null)

                          JsonString = JsonString.replaceAll('"[^"]*":null',''); //basic removeal of null values
                          JsonString = JsonString.replaceAll(',2,', ','); //remove duplicate/multiple commas
                          JsonString = JsonString.replace(',', ''); //prevent opening brace from having a comma after it
                          JsonString = JsonString.replace(',', ''); //prevent closing brace from having a comma before it
                          JsonString = JsonString.replace('[,', '['); //prevent opening bracket from having a comma after it
                          JsonString = JsonString.replace(',]', ']'); //prevent closing bracket from having a comma before it


                          return JsonString;



                          Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
                          System.debug(stripJsonNulls(JSON.serialize(bodyMap,false)));


                          OP : "key":"value"



                          Src: https://iwritecrappycode.wordpress.com/2014/07/16/stripping-nulls-from-a-json-object-in-apex/






                          share|improve this answer

























                            0












                            0








                            0







                            This is a problem which I had faced, and I came across a string manipulation method that strips out nulls from null json keys.



                             public static string stripJsonNulls(string JsonString)


                            if(JsonString != null)

                            JsonString = JsonString.replaceAll('"[^"]*":null',''); //basic removeal of null values
                            JsonString = JsonString.replaceAll(',2,', ','); //remove duplicate/multiple commas
                            JsonString = JsonString.replace(',', ''); //prevent opening brace from having a comma after it
                            JsonString = JsonString.replace(',', ''); //prevent closing brace from having a comma before it
                            JsonString = JsonString.replace('[,', '['); //prevent opening bracket from having a comma after it
                            JsonString = JsonString.replace(',]', ']'); //prevent closing bracket from having a comma before it


                            return JsonString;



                            Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
                            System.debug(stripJsonNulls(JSON.serialize(bodyMap,false)));


                            OP : "key":"value"



                            Src: https://iwritecrappycode.wordpress.com/2014/07/16/stripping-nulls-from-a-json-object-in-apex/






                            share|improve this answer













                            This is a problem which I had faced, and I came across a string manipulation method that strips out nulls from null json keys.



                             public static string stripJsonNulls(string JsonString)


                            if(JsonString != null)

                            JsonString = JsonString.replaceAll('"[^"]*":null',''); //basic removeal of null values
                            JsonString = JsonString.replaceAll(',2,', ','); //remove duplicate/multiple commas
                            JsonString = JsonString.replace(',', ''); //prevent opening brace from having a comma after it
                            JsonString = JsonString.replace(',', ''); //prevent closing brace from having a comma before it
                            JsonString = JsonString.replace('[,', '['); //prevent opening bracket from having a comma after it
                            JsonString = JsonString.replace(',]', ']'); //prevent closing bracket from having a comma before it


                            return JsonString;



                            Map<String, String> bodyMap = new Map<String, String> 'key'=>'value', 'key2'=>null;
                            System.debug(stripJsonNulls(JSON.serialize(bodyMap,false)));


                            OP : "key":"value"



                            Src: https://iwritecrappycode.wordpress.com/2014/07/16/stripping-nulls-from-a-json-object-in-apex/







                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered 2 hours ago









                            Pranay JaiswalPranay Jaiswal

                            18.6k53158




                            18.6k53158



























                                draft saved

                                draft discarded
















































                                Thanks for contributing an answer to Salesforce Stack Exchange!


                                • Please be sure to answer the question. Provide details and share your research!

                                But avoid


                                • Asking for help, clarification, or responding to other answers.

                                • Making statements based on opinion; back them up with references or personal experience.

                                To learn more, see our tips on writing great answers.




                                draft saved


                                draft discarded














                                StackExchange.ready(
                                function ()
                                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f257158%2fjson-serialize-is-it-possible-to-suppress-null-values-of-a-map%23new-answer', 'question_page');

                                );

                                Post as a guest















                                Required, but never shown





















































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown

































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown







                                Popular posts from this blog

                                How should I use the fbox command correctly to avoid producing a Bad Box message?How to put a long piece of text in a box?How to specify height and width of fboxIs there an arrayrulecolor-like command to change the rule color of fbox?What is the command to highlight bad boxes in pdf?Why does fbox sometimes place the box *over* the graphic image?how to put the text in the boxHow to create command for a box where text inside the box can automatically adjust?how can I make an fbox like command with certain color, shape and width of border?how to use fbox in align modeFbox increase the spacing between the box and it content (inner margin)how to change the box height of an equationWhat is the use of the hbox in a newcommand command?

                                152 Atala Notae | Nexus externi | Tabula navigationis"Discovery Circumstances: Numbered Minor Planets"2000152Small-Body Database

                                Doxepinum Nexus interni Notae | Tabula navigationis3158DB01142WHOa682390"Structural Analysis of the Histamine H1 Receptor""Transdermal and Topical Drug Administration in the Treatment of Pain""Antidepressants as antipruritic agents: A review"