StringifyJSONJSON은 JavaScript Object Notation의 줄임말, 데이터 교환을 위해 만들어진 객체 형태의 포맷
문자열이다 - 범용적으로 읽기 위해
JSON은 문자열이기 때문에
JSON.parseJSON.stringify를 사용하여 바꿔준다
자바스크립트 객체와 비슷해 보이지만...
키와 문자열 값은 반드시 큰따옴표를 붙여야 함
키와 값 사이, 그리고 키-값 쌍 사이에는 공백이 있어서는 안 된다
JSON.stringify 구현재귀를 사용한다
자바스크립트 객체와 JSON은 대표적인 트리 구조를 가지고 있으므로, 전형적인 재귀 탐색이 가능한 구조(객체의 값으로 객체를 포함하는 구조)이기 때문
요소의 타입을 확인하여 그에 맞게 리턴
타입이 배열이나 객체라면 요소마다 재귀를 사용
객체의 키값이 undefined, function 이라면 제외
function stringifyJSON(obj) {
if (typeof(obj) === 'number' || typeof(obj) === 'boolean' || obj === null) return `${obj}`
if (typeof(obj) === 'string') return `"${obj}"`
if (Array.isArray(obj)) return `[${obj.map(x => stringifyJSON(x))}]`
if (typeof(obj) === 'object') return `{${Object.keys(obj).filter(x => !(typeof(obj[x]) === 'undefined' || typeof(obj[x]) === 'function'))
.map(x => `"${x}":${stringifyJSON(obj[x])}`)}}`
};