Stringify
recreate JSON stringify
by Augustus Yuan
HTML
<div id="result">
</div>
JavaScript
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
// JSON.stringify({}); // '{}'
// JSON.stringify(true); // 'true'
// JSON.stringify('foo'); // '"foo"'
// JSON.stringify([1, 'false', false]); // '[1,"false",false]'
// JSON.stringify({ x: 5 }); // '{"x":5}'
// JSON.stringify({ ... });
// console.log(JSON.stringify({ x: 'lol', y: "lol" })); // { "": "" }
// JSON.stringify('hello') // "hello"
function stringify(data, stringWrapper = '"') {
var string = "";
if (typeof data === "string") {
return stringWrapper + data + stringWrapper;
} else if (typeof data === "number") {
return data;
} else if (typeof data === "boolean") {
return '' + data;
} else if (Array.isArray(data)) {
// [{1}, [2, 3]] => 1,2,3
return stringArrayBuilder(data);
} else if (typeof data === "object" && data) {
return stringObjectBuilder(data);
} else if (!data) {
if (typeof data === "object") {
return 'null';
}
return '';
}
}
// handles building arrays and nested arrays
function stringArrayBuilder(data) {
// move logic to determine if array or object
var string = '[';
for (var i=0; i<data.length; i++) {
string += stringify(data[i]);
if (i !== data.length-1) {
string += ','
}
}
string += ']';
return string;
}
function stringObjectBuilder(data) {
if (data.toString() === '[object Object]') {
var string = '{';
var keys = Object.keys(data);
for (var i=0; i < keys.length; i++) {
string += stringify(keys[i]) + ':' + stringify(data[keys[i]])
if (i !== keys.length-1) {
string += ','
}
}
string += '}';
return string;
}
return data.toString();
}
stringify({ test: true }); // => '{test:true}'
var obj = {};
document.getElementById('result').innerHTML = stringify([new Number(3), new String('false'), new Boolean(false)]);