본문 바로가기
js

JSON Serializer

by Nick Black 2020. 11. 19.
반응형

안녕하세요 오늘은 Serializer 에 대해서 알아 볼껀데요

 

왜 Serializer가 필요한지에 대해서 한번 생각해볼까요?

저희가 이제 string 타입이나 number 타입 boolean 타입 같은 경우에는 바로 문자열로 만들어 줄수가 있습니다

이런식으로 말이죠

하지만 객체나 배열 같은 경우에는 어떨까요?

이런식으로 배열 같은 경우에는 괄호( [ ] )가 없어진 형태로 문자열로 바뀌게 되고
객체 같은 경우에는 [object object]라고 나오네요

 

그렇다면 전체적으로 배열 같은 경우에는 괄호가 삭제 되지 않고
객체 같은 경우에는 object라고 나오지 않게 끔 문자 타입으로 변경 하려면 어떻게 해야 할까요?

이러한 식으로 JSON.stringify(변수) 하신다면 문제 없이 변경 할수 있습니다

 

하지만 JSON.stringify를 사용하지 않고 하려면 어떻게 해야 할까요?
여기서에 간단한 로직이 있습니다

하지만 만들기 앞서 JSON의 구조를 간단하게 말씀 드리자면
JSON은 6개의 자료형을 지원합니다
string, number, boolean, null, array, object
이렇게 6개를 지원 한답니다 그럼 바로 보실까요?

function stringify(obj){
	//obj가 null로 들어 왔을때 문자형 null로 반환을 해줍니다
	if (obj === null){
		return "null"
	}
	// obj가 넘버로 들어왔을때 string을 사용하여 문자형으로 바꾸어서 반환 해줍니다
	if (typeof(obj) === "number"){
		return String(obj)
	}
	// obj가 불린값으로 들어왔을때 정규식을 이용하여 문자형으로 반환 합니다
	if (typeof(obj) === "boolean"){
		return `${obj}`
	}
	//obj가 문자형 일때 정규식으로 ""를 붙여서 반환 합니다
	if (typeof(obj) === "string"){
		return `"${obj}"`
    }
	//obj가 배열일때 정규식으로 문자열로 만들고 안에 map을 사용하고 재귀 함수를 이용하여
	//join으로 ,을 붙여 줍니다
	if (Array.isArray(obj)){
		return `[${obj.map(stringify).join(",")}]`
	}
	//JSON은 6개 타입을 지원하지 않으니 나머지는 그냥 return 처리
	//Object.entries() 매서드를 사용하여 키와 값을 반복 처리
	//그러고서 map으로 문자열화 시켜서 반환함
	return `{${Object.entries(obj).map(([k, v]) => `"${k}":${stringify(v)}`).join(",")}}`

}

이러한 식으로 JSON.stringify를 사용하지 않고 문자열화 시킬수 있습니다 한번 예제를 볼까요?

let str , num , boo , nul, arr, obj

str = "hi"
num = "1234"
boo = true
nul = null
arr = [1,2,3,4,5,[],[[[[[]]]]],10]
obj = {
        name:'kim',
        age:20,
        gender:'male'
}

이런식으로 잘 나온걸 확인 할수있습니다

여기까지 JSON Serializer 에 대해서 알아 보았는데요 다음에는 반대의 개념인 Parser에 대해서도 다루도록 하겠습니다
오늘 하루 수고 하셨고 긴글 읽어주셔서 감사합니다

반응형