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
“힘내라구.” 밤에 헤어질 때, 아주 좋은 이야기를 나누었을 때든지 아무 관련 없이 로댕은 곧잘 내게 이렇게 말하는 것이었습니다. 그는 알고 있었던 겁니다. 젊었을 때, 이 말이 날마다 얼마나 필요한 것인가를. (릴케)