OSB
OSB copied to clipboard
Build JSON request coerser for API
function coerceJSON(payload) {
// Helper function to coerce values
function coerceValue(value) {
if (value === 'true') return true;
if (value === 'false') return false;
if (!isNaN(value)) {
return Number.isInteger(Number(value)) ? parseInt(value) : parseFloat(value);
}
if (value === 'null') return null;
if (value === 'undefined') return undefined;
return value;
}
// Helper function to handle coercion for objects and arrays
function coerceObject(obj) {
if (Array.isArray(obj)) {
return obj.map(item => Array.isArray(item) || (typeof item === 'object' && item !== null) ? coerceObject(item) : coerceValue(item));
}
if (typeof obj === 'object' && obj !== null) {
const coercedObj = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
coercedObj[key] = Array.isArray(obj[key]) || (typeof obj[key] === 'object' && obj[key] !== null) ? coerceObject(obj[key]) : coerceValue(obj[key]);
}
}
return coercedObj;
}
return coerceValue(obj);
}
// Start coercion recursively
return coerceObject(payload);
}
// Example usage:
const payload = {
"booleanString": "true",
"numberString": "42",
"floatString": "3.14",
"nullString": "null",
"undefinedString": "undefined",
"nestedObject": {
"booleanString": "false",
"numberString": "123",
"floatString": "2.718",
"nullString": "null",
"undefinedString": "undefined",
"array": ["1", "2", "3"]
},
"array": ["true", "false", "42", "3.14", "null", "undefined"],
"nestedArray": [
[{ "booleanString": "true", "numberString": "42" }],
[{ "booleanString": "false", "numberString": "123" }]
]
};
const coercedPayload = coerceJSON(payload);
console.log(coercedPayload);