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
Can we generate random numbers using irrational numbers like π and e?
What does もの mean in this sentence?
The difference between dialogue marks
"as much details as you can remember"
Deal with toxic manager when you can't quit
Relationship between Gromov-Witten and Taubes' Gromov invariant
APIPA and LAN Broadcast Domain
What is the meaning of Triage in Cybersec world?
Why couldn't they take pictures of a closer black hole?
How to display lines in a file like ls displays files in a directory?
Why are there uneven bright areas in this photo of black hole?
Loose spokes after only a few rides
What is this business jet?
Pokemon Turn Based battle (Python)
What to do when moving next to a bird sanctuary with a loosely-domesticated cat?
Why was M87 targeted for the Event Horizon Telescope instead of Sagittarius A*?
How do you keep chess fun when your opponent constantly beats you?
If I score a critical hit on an 18 or higher, what are my chances of getting a critical hit if I roll 3d20?
The phrase "to the numbers born"?
What information about me do stores get via my credit card?
Are there any other methods to apply to solving simultaneous equations?
Can there be female White Walkers?
A word that means fill it to the required quantity
How to type a long/em dash `—`
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;
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
add a comment |
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
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 days ago
This methodserialize(objectToSerialize, suppressApexObjectNulls)
seems to work specifically on ApexObject
types only and that the platform considers a Collection to be distinct from an Apex Object.
– Jayant Das
2 days ago
@JayantDas True. Same behaviour with List.
– kvor
2 days 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 days ago
add a comment |
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
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
apex json null serialize
asked 2 days ago
kvorkvor
785
785
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 days ago
This methodserialize(objectToSerialize, suppressApexObjectNulls)
seems to work specifically on ApexObject
types only and that the platform considers a Collection to be distinct from an Apex Object.
– Jayant Das
2 days ago
@JayantDas True. Same behaviour with List.
– kvor
2 days 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 days ago
add a comment |
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 days ago
This methodserialize(objectToSerialize, suppressApexObjectNulls)
seems to work specifically on ApexObject
types only and that the platform considers a Collection to be distinct from an Apex Object.
– Jayant Das
2 days ago
@JayantDas True. Same behaviour with List.
– kvor
2 days 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 days 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 days 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 days 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 days 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 days ago
@JayantDas True. Same behaviour with List.
– kvor
2 days ago
@JayantDas True. Same behaviour with List.
– kvor
2 days 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 days 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 days ago
add a comment |
3 Answers
3
active
oldest
votes
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
add a comment |
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));
add a comment |
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/
You want to trust a site called "I Write Crappy Code?"
– corsiKa
2 days ago
😛 what's in the name ~ Shakespeare
– Pranay Jaiswal
2 days ago
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
add a comment |
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
add a comment |
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
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
answered 2 days ago
Jayant DasJayant Das
18.2k21330
18.2k21330
add a comment |
add a comment |
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));
add a comment |
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));
add a comment |
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));
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));
answered 2 days ago
Derek FDerek F
21k52353
21k52353
add a comment |
add a comment |
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/
You want to trust a site called "I Write Crappy Code?"
– corsiKa
2 days ago
😛 what's in the name ~ Shakespeare
– Pranay Jaiswal
2 days ago
add a comment |
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/
You want to trust a site called "I Write Crappy Code?"
– corsiKa
2 days ago
😛 what's in the name ~ Shakespeare
– Pranay Jaiswal
2 days ago
add a comment |
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/
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/
answered 2 days ago
Pranay JaiswalPranay Jaiswal
18.7k53158
18.7k53158
You want to trust a site called "I Write Crappy Code?"
– corsiKa
2 days ago
😛 what's in the name ~ Shakespeare
– Pranay Jaiswal
2 days ago
add a comment |
You want to trust a site called "I Write Crappy Code?"
– corsiKa
2 days ago
😛 what's in the name ~ Shakespeare
– Pranay Jaiswal
2 days ago
You want to trust a site called "I Write Crappy Code?"
– corsiKa
2 days ago
You want to trust a site called "I Write Crappy Code?"
– corsiKa
2 days ago
😛 what's in the name ~ Shakespeare
– Pranay Jaiswal
2 days ago
😛 what's in the name ~ Shakespeare
– Pranay Jaiswal
2 days ago
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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 days ago
This method
serialize(objectToSerialize, suppressApexObjectNulls)
seems to work specifically on ApexObject
types only and that the platform considers a Collection to be distinct from an Apex Object.– Jayant Das
2 days ago
@JayantDas True. Same behaviour with List.
– kvor
2 days 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 days ago