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
진실한 의식을 갖춘 영혼은 자신보다 훨씬 뛰어난 무엇을 발견할 줄 압니다. 칭찬이란 이해입니다. 근본적으로 누구나 위대하고 훌륭합니다. 누군가를 아무리 칭찬한다 해도 지나치지 않습니다. 타인 속에 있는 위대함과 아름다움을 발견하는 눈을 기르십시오. 《보여줄 수 있는 사랑은 아주 작습니다》 (칼릴지브란)