Html & Script

자바스크립트 serialize 함수

컨텐츠 정보

본문

*소개)
예전에 PHP -> 자바스크립트로 serialize 시켜서 통신하는 것을 보았는데, 그 반대 방향도 가능했으면 좋겟다는 생각에 만들어본 함수입니다. 솔직히 만든 저 역시 아직 사용처를 정하지 못했지만, 어딘가에는 쓸만한 곳이 있을 듯 하여 공개합니다. -_-;;

*소스)
function serialize (obj) {
        var idx, len=0, retStr = '';

        switch(typeof(obj)) {
                case 'number':
                        if (parseInt(obj) == obj) retStr = 'i:' + obj + ';';
                        else retStr = 'd:' + obj + ';';
                        break;
                case 'string':
                        retStr = 's:' + obj.length + ':"' + obj + '";'
                        break;
                case 'null':
                        retStr = 'N;';
                        break;
                case 'object':
                        if (obj == null) {
                                retStr = 'N;';
                        } else if (typeof(obj.reverse) == 'function') {
                                retStr = 'a:' + obj.length + ':{';
                                for (idx in obj) {
                                        if (parseInt(idx).toString() == idx) idx = parseInt(idx);
                                        retStr += serialize(idx) + serialize(obj[idx]);
                                }
                                retStr += '}';
                        } else {
                                for (idx in obj) {
                                        if (parseInt(idx).toString() == idx) idx = parseInt(idx);
                                        retStr += serialize(idx) + serialize(obj[idx]);
                                        len++;
                                }
                                retStr = 'a:' + len + ':{' + retStr + '}';
                        }
                        break;
                default:
                        retStr = 'N;';
        }

        return retStr;
}

*주의)
메소드와 프로퍼티가 공존하는 객체형은 제대로 된 결과를 얻을 수 없습니다. 자바스크립트의 객체모델과 PHP의 객체모델이 좀 달라서 이 부분은 제대로 할 수 없더군요. 숫자, 문자열, 숫자인덱스 배열, 문자열인덱스 배열(이 부분이 자바스크립트에선 컬렉션 개체가 되죠) 만 시리얼라이즈 할 수 있습니다. 함수도 해보려고 했는데 PHP에서는 함수의 이름만을 가져오는 반면에 자바스크립트는 함수의 코드 전체를 가지고 와서 다루기 힘들길래 제외시켰습니다. 단순 배열정도의 처리에만 사용하셨으면 합니다.

*브라우저정보)
IE6+, 모질라1.5 (다른 브라우저는 없어서 테스트해보지 않았습니다)

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
“무릇 물이란 지세를 따라 흐르되 작은 틈도 놓치지 않고 적시니 지혜를 갖춘 자와 같고, 움직이면서 아래로 흘러가니 예를 갖춘 자와 같으며, 어떤 깊은 곳도 머뭇거리지 않고 들어가니 용기를 가진 자와 같고 장애물이 막혀서 갇히면 고요히 맑아지니 천명을 아는 자와 같으며, 험한 곳을 거쳐 멀리 흐르지만 끝내 남을 허물어뜨리는 법이 없으니 덕을 가진 자와 같다. 천지는 이것으로 이루어지고, 만물은 이것으로 살아가며, 나라는 이것으로 안녕을 얻고, 만사는 이것으로 평안해지며, 만물은 이것으로 바르게 되는 것이다. 이것이 지혜로운 자가 물을 좋아하는 이유이다.” (한영, <<한시외전>>)