데이터 교환을 위해 만들어진 객체 형태의 포맷.
객체는 타입 변환을 이용해 String으로 변환할 경우 객체 내용을 포함하지 않는다. JavaScript에서 객체에 메소드(message.toString())나 형변환(String(message))을 시도하면, [object Object] 라는 결과를 리턴한다.
객체를 JSON의 형태로 변환하거나 JSON을 객체의 형태로 변환하면 가능하다.
Object type
을 JSON
으로 변환.JSON
을 Object type
으로 변환.JSON.stringify()는 Object type
을 JSON 문자열
으로 변환시켜주는 함수이다.
자바스크립트 객체와 구조는 같지만, 객체가 아닌 문자열로서 존재한다.
개발자 도구에서 __proto__ : Object
를 통해 객체임을 확인할 수 있다.
User 객체를 JSON.stringify()함수를 사용해서 출력해보자.
개발자 도구에서 확인하면 문자열로 출력되는 것을 확인할 수 있다.
객체가 아니기 때문에 __proto__ : Object
는 확인할 수 없다.
Array 객체의 경우에도 JSON.stringify()를 통해 json 문자열로 만들 수 있다.
fruits 배열이 __proto__: Array
로 Array 객체로서 인식한 것을 확인할 수 있다.
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify('foo'); // '"foo"'
JSON.stringify([1, 'false', false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'
JSON.stringify(new Date(2006, 0, 2, 15, 4, 5))
// '"2006-01-02T15:04:05.000Z"'
JSON.stringify({ x: 5, y: 6 });
// '{"x":5,"y":6}' or '{"y":6,"x":5}'
JSON.stringify([new Number(1), new String('false'), new Boolean(false)]);
// '[1,"false",false]'
// Symbols:
JSON.stringify({ x: undefined, y: Object, z: Symbol('') });
// '{}'
JSON.stringify({ [Symbol('foo')]: 'foo' });
// '{}'
JSON.stringify({ [Symbol.for('foo')]: 'foo' }, [Symbol.for('foo')]);
// '{}'
JSON.stringify({ [Symbol.for('foo')]: 'foo' }, function(k, v) {
if (typeof k === 'symbol') {
return 'a symbol';
}
});
// '{}'
// Non-enumerable properties:
JSON.stringify( Object.create(null, { x: { value: 'x', enumerable: false }, y: { value: 'y', enumerable: true } }) );
// '{"y":"y"}'
JSON.parse()는 JSON 문자열
을 Object type
으로 변환해주는 역할을 한다.
JSON.parse()를 사용해서 __proto__ : Object
가 확인 되는 것을 알 수 있다.