2017-03-20 1 views
0

JSON.stringify에는 toJSON이라는 이름의 함수를 정의하여 객체가 자체 직렬화를 정의 할 수있는 기능이 있습니다. 도 캐릭터 라인되는 개체 값 함수 toJSON이라는 속성이있는 경우, 다음 toJSON() 메소드는 커스터마이즈JSON.stringify가 toSON을 호출하지 못하도록하는 방법이 있습니까?

toJSON() 동작

: 여기

는 MDN 워드 프로세서에서 발췌 JSON 문자열 동작 : 개체를 serialize하는 대신 toJSON() 메서드가 호출 될 때 값이 반환되면 serialize됩니다.

toJSON 메서드가 연결되어 있어도이를 무시하고 '일반'직렬화를 수행 할 수 있도록 재정의하는 방법이 있습니까?

이유 : JS 라이브러리로 인해 사소한 버그가있는 일부 toJson 메서드가 내 환경에 도입되었습니다. 그리고 이러한 버그가있는 직렬화 된 형식 중 일부가 받아 들여지고 서버 쪽이 해당 형식으로 코딩됩니다.

그래서 버그가있는 메소드를 제거 할 수 없다는 이유로 붙어 있지만 JSON.stringify가 앞으로 이러한 메소드를 무시할 것을 암시하고 싶습니다.

+1

는 대답으로이를 게시하려고하지 이 방법을 재정의 할 수 있습니다. https://jsfiddle.net/TheQueue841/6ynwmy5t/ –

답변

1

당신은 방법을 재정의 할 수

var fn = JSON.stringify; 

JSON.stringify = function (o) { 
    var tmp, toJSON;  

    if(o.toJSON){ 
    toJSON = o.toJSON; 
    delete o.toJSON;  
    } 
    tmp = fn.apply(this, arguments); 
    toJSON && (o.toJSON = toJSON); 
    return tmp; 
}; 
심지어 시도하는 데 부끄러워이기 때문에
+0

고마워. 유망 해 보인다. 나는 그것을 밖으로 시도 할 것이다. – Teddy

1

당신이 당신의 객체에 toJSON 속성을 null의 경우 그것은 당신이

var copy = Object.assign({}, obj); 
obj.toJSON = null; 
전에 그것의 복사본을 만들 수있는 객체를 수정하지 않으려면 행동을

obj.toJSON = null; 

을 기본값으로 다시 얻을 것이다

+1

'null '값도 직렬화되므로'undefined'를 사용하십시오. 그리고이 메서드가 Object에 어떻게 첨부되는지에 따라 다릅니다. 객체는 고정 될 수 있고, 프로퍼티는'쓰기 가능 : false' 또는'configurable : false' 일 수 있으며, 메소드를 덮어 쓰지 못하게 할 수있는 몇 가지 가능성이 있습니다. – Thomas

관련 문제