JAVA SCRIPT - Converting an Object to a Filtered/Transformed String with JSON

Converting an Object to a Filtered/Transformed String with JSON


Problem

You need to convert a JavaScript object to a JSON-formatted string for posting to a web application. However, the web application has data requirements that differ from your client application.

Solution

Use the JSON.stringify() method, passing in the object as first parameter and pro‐ viding a transforming function (a replacer) as the second parameter:
function convertBoolToNums(key, value) {
 if (typeof value == 'boolean') {
 if (value)
 value = 1;
 else
 value = 0;
 }
 return value;
};
var obj = {test : "value1",
 test2 : 3.44,
 test3 : false};
var jsonstr = JSON.stringify(obj, convertBoolToNums, 3);
console.log(jsonstr); // '{ "test" : "value1", "test2" : 3.44, "test3" : 0}'

EXPLAIN

The JSON.stringify() method takes three parameters: the object to be transformed into JSON, an optional function or array used either to transform or filter one or more object values, and an optional third parameter that defines how much and what kind of whitespace is used in the generated result. In the solution, a function is used to check property values, and if the value is a Boolean, converts false to 0, and true to 1. 

The function results are transformed into a string if the return value is a number or Boolean. The function can also act as a filter: if the returned value from the function is null, the property/value pair is removed from the JSON.

You can also use an array rather than a function. The array can contain strings or num‐ bers, and is a whitelist of properties that are allowed in the result. The following code:



var whitelist = ["test","test2"];
var obj = {"test" : "value1", "test2" : 3.44, "test3" : false};
var jsonobj = JSON.stringify(obj, whitelist, '\t');
Would result in a JSON string including the object’s test and test2 properties, but not the third property (test3), The resulting string is also pretty-printed using a tab (\t) this time, instead of the three spaces used in the solution:
{
 "test": "value1",
 "test2": 3.44
}

The last parameter controls how much whitespace is used in the result. It can be a number representing the number of spaces or a string. If it is a string, the first 10 char‐ acters are used as whitespace. If I use the following:

var jsonobj = JSON.stringify(obj, whitelist, "***");

the result is:

{
***"test": "value1",
***"test2": 3.44
}

0 comments:

Post a Comment