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 (다른 브라우저는 없어서 테스트해보지 않았습니다)

관련자료

등록된 댓글이 없습니다.
Today's proverb
우리의 현재 위치가 소중한 것이 아니라 우리가 가고자 하는 방향이 소중한 것이다. (홈즈)