JSON.stringify() 메서드는 JavaScript 값이나 객체를 JSON 문자열로 변환합니다. 선택적으로, replacer를 함수로 전달할 경우 변환 전 값을 변형할 수 있고, 배열로 전달할 경우 지정한 속성만 결과에 포함합니다. - MDN
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()는 자바스크립트 데이터를 JSON 문자열로 변환해주는 메서드이다. Object 나 Array를 받았을 경우 모두 string으로 변환해주며, 재귀를 이용하여 구현했다.
JSON.stringify() 메서드는 배열이든 객체든 내부의 값을 문자열로 변환해주는 메서드이기 때문에, 타입을 검사한 후 각 타입에 맞는 로직이 작동되어 반환해주도록 구현했다. 특히 객체의 의 property가 함수 (메서드)일 경우 ‘{}’이 출력된다. 또한 고차원 배열이나, 중첩 객체를 다루기 위해 재귀로 자신을 호출하며, 배열의 경우 빈 배열에 변환 된 값을push하여 리턴하고 객체의 경우 빈 문자열에 변환된 값을 '{' , '}' 로 감싸서 더해준다.
function stringifyJSON(obj) {
if (typeof obj === "boolean" || typeof obj === "number") {
return String(obj);
}
if (Array.isArray(obj)) {
let temp = [];
if (obj.length === 0) {
return "[]";
} else {
for (item of obj) {
if (typeof item === "string") {
temp.push(`"${item}"`);
} else {
temp.push(stringifyJSON(item));
}
}
}
return `[${temp}]`;
} else if (typeof obj === "object" && obj !== null) {
if (Object.keys(obj).length === 0) {
return "{}";
} else {
let str = "";
for (let prop in obj) {
if (typeof obj[prop] == "function") {
return "{}";
}
let key = stringifyJSON(prop);
let val = stringifyJSON(obj[prop]);
str += key + ":" + val;
str += ",";
}
str = str.slice(0, -1);
return `{${str}}`;
}
} else if (typeof obj === "string") {
return `"${obj}"`;
} else if (obj === null) {
return "null";
}
}