• ie에서 JSON.stringify 지원하지 않는 문제를 해결해보자
    크로스 브라우징 2016. 6. 11. 13:09
    반응형

    이번 글은 JSON으로 인한 하나의 문제를 다뤄본다.

    그 문제의 원인은 ie8이하부터는 지원되지 않는다. (항상 ie가 문제다..)


    일단 JSON이 무엇인지 알아보자.

    JSON은 풀어보면 JavaScript Object Notation 자바스크립트 객체 표기법이다.

    말 그대로 자바스크립트에서의 데이터를 객체로 표현하는 형식이다.


    JSON은 프로그래밍 언어가 아니라 단순히 데이터 포맷 or 데이터 표현이라고 보자.

    XML과 비슷하지만 조금 더 간단하다.


    본인도 JSON.stringify()을 이용할려고 하니 ie쪽에서 말썽이었다.

    대부분 json2.js 또 해석하기가 까다로운 소스들이 나와있다.

    본인은 구지 하나 때문에 스크립트 파일을 추가하거나 해석도 못할 소스를 넣는 것도 내키지 않았다.


    그렇기에 본인은 jquery를 이용한 방법을 다뤄본다.

    대부분 jquery 기본적으로 사용하는 경우가 많기에 효율적인 방법이다.

    jquery를 안 쓴다면 위의 2가지 방법 중 하나를 하는 게 더 나을 것이다.


    jQuery.extend({
                stringify  : function stringify(obj) {
                    if ("JSON" in window) {
                        return JSON.stringify(obj);
                    }
    
                    var t = typeof (obj);
                    if (t != "object" || obj === null) {
                        // simple data type
                        if (t == "string") obj = '"' + obj + '"';
                        return String(obj);
                    } else {
                        // recurse array or object
                        var n, v, json = [], arr = (obj && obj.constructor == Array);
    
                        for (n in obj) {
                            v = obj[n];
                            t = typeof(v);
                            if (obj.hasOwnProperty(n)) {
                                if (t == "string") {
                                    v = '"' + v + '"';
                                } else if (t == "object" && v !== null){
                                    v = jQuery.stringify(v);
                                }
    
                                json.push((arr ? "" : '"' + n + '":') + String(v));
                            }
                        }
    
                        return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
                    }
                }
            });


    다른 방법보다 훨씬 깔끔하다.

    간단히 JSON이 있을 시는 기존 네이티브를 사용할 것이고 그렇지 않으면 확장시킨 함수를 사용하는 것이다.

    더 좋은 방법이 있으면 댓글을 통해 알려주길 바란다.



    반응형

    댓글

Designed by Tistory.