JSON.stringify() 메소드는 객체를 문자열로 변환하는 기능 외에도, 객체 내부에 포함된 함수(function)를 발견하면 해당 함수를 자동으로 제거합니다. 따라서 함수가 삭제되지 않도록 하려면, JSON.stringify()를 적용하기 전에 먼저 함수를 문자열로 변환해야 합니다.
함수가 삭제되는 일반적인 경우
다음 예제에서는 함수가 문자열로 변환되지 않은 상태이기 때문에, JSON.stringify() 메소드가 실행되는 시점에 함수가 제거되고 나머지 속성들만 출력됩니다.
예제
<html>
<body>
<p id="stringify"></p>
<script>
var person = { name: function () {return Ram + Rahim;},
designation:"Developer" , city: "Hyderabad" };
var myJSON = JSON.stringify(person);
document.getElementById("stringify").innerHTML = myJSON;
</script>
</body>
</html>출력 결과
{"designation":"Developer","city":"Hyderabad"}출력 결과를 보면 name 속성에 담긴 함수가 사라지고, 일반 값인 designation과 city만 남아있는 것을 확인할 수 있습니다.
toString()으로 함수를 문자열로 변환하는 방법
다음 예제에서는 JSON.stringify() 메소드가 실행되기 전에 toString() 메소드를 사용하여 함수를 문자열로 미리 변환했습니다. 이렇게 하면 JSON.stringify()가 실행된 후에도 함수가 삭제되지 않고 그대로 유지됩니다.
예제
<html>
<body>
<p id="stringify"></p>
<script>
var obj = { name: function () {return Ram + Rahim;},
designation:"Developer" , city: "Hyderabad" };
obj.name = obj.name.toString();
var myJSON = JSON.stringify(obj);
document.getElementById("stringify").innerHTML = myJSON;
</script>
</body>
</html>출력 결과
{"name":"function () {return Ram + Rahim;}","designation":"Developer","city":"Hyderabad"}이처럼 toString()을 활용해 함수를 문자열로 변환한 뒤 직렬화하면, JSON 문자열 안에 함수 코드가 그대로 보존되는 것을 확인할 수 있습니다. 이 방법은 객체를 저장하거나 전송할 때 함수 정보까지 함께 유지해야 하는 경우에 유용하게 활용됩니다.