타팀에서 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) 로직을 실행하는 것입니다.
처는 먼저 방식으로 처리 했고; 해당 파일은 첨부하겠습니다.^^;
저처럼 삽질하는 사람이 줄기를 바라는 마음에..^_^.ㅋㅋㅋ
'컴퓨터 이야기' 카테고리의 다른 글
IE6/IE7/IE8 등의 호환을 유지한채 HTML5 사용. (4) | 2012.06.15 |
---|---|
IE7 이하 버젼에서의 'hashchange' 이벤트 처리 (0) | 2011.09.30 |
사파리 브라우저 AJAX 관련 버그 (5) | 2011.04.18 |
2013년 디지털 교과서 10만원 수준에 공급.!! (1) | 2007.03.12 |
컴퓨터 살때 윈도우 빼고 주세요!! (41) | 2007.03.08 |