타팀에서 daum에디터를 사용하려는데 JSON.stringify(json) 사용시

array에 대해서 2중 String변환이 일어나 문제가 발생 한다고 기술지원 요청이 왔습니다.

일단 디버깅을 해보니, daum에디터에서 array에 대해서 toJSON을 구현해 두었더군요;;

toJSON은 array를 String으로 변환해줍니다.



문제는 json2.js 239라인 에 아래와 같은 구현이 있다는 것입니다.

        // If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
         if (typeof value.toJSON(key) !== 'string') value = value.toJSON(key);
        }


네!! toJSON()이 구현되어 있는 경우에 대해서는, toJSON(key)을 실행하도록 해주네요;

그러면서 배열에 대해서 toJSON이 실행되고, 값은 String으로 변환된 상태에서 json2.js는 또한번 String으로 변환하는 문제가 발생합니다;



그래서 위 코드를 아래와 같이 변환하여 주었습니다.

       // If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
         var v2=value.toJSON(key);
         if (typeof value.toJSON(v2) === 'string') return v2;
         else          value = v2;
        }



toJSON()함수가 있을때 실행해봐서; string이 나오면, 그 string을 return하게 합니다;

테스트해보니; 일단은 잘 돌아갑니다.




아래와 같은 방법도 있습니다.

위보다 성능은 더 떨어질듯 하지만 코드는 아래가 더 이뻐보이네요.ㅎㅎ

 

        // If the value has a toJSON method, call it to obtain a replacement value.

        if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
         if (typeof value.toJSON(value.toJSON(key)) !== 'string') value = value.toJSON(key)
        }

방법은 toJSON을 실행해봐서 결과가  "string"으로 나오면; 무시하고 아닌경우에만

value = value.toJSON(key) 로직을 실행하는 것입니다.


처는 먼저 방식으로 처리 했고; 해당 파일은 첨부하겠습니다.^^;

저처럼 삽질하는 사람이 줄기를 바라는 마음에..^_^.ㅋㅋㅋ


+ Recent posts