JSON 과 메서드
JSON 과 메서드
복잡한 복합 자료 구조를 네트워크를 통해 내보내거나 로깅 목적으로 출력할 때 객체를 문자열로 전환 필요
중첩 자료 구조 까지 변경하기 어려움
-
JSON
값이나 객체를 나타내주는 범용 포맷(문자열)
데이터 교환 목적으로 사용하는 경우 많음
서버측 언어는 무엇이든 상관 없음
주석 지원하지 않음(쉽고 빠르고 신뢰할 수 있을 만한 파싱 알고리즘 구현하기 위함)
-
메서드
JSON.stringify
JSON.parse
-
-
JSON.stringify
JSON.stringify(value[, replacer, space])
-
value
인코딩 하려는 값
-
replacer
JSON 으로 인코딩 하길 원하는 프로퍼티가 담긴 배열. 또는 매핑함수 function(key, value)
-
space
서식 변경 목적으로 사용할 공백 문자 수
객체를 JSON 으로 바꿔줌
거쳐서 변경된 문자열을 JSON 으로 인코딩된, 직렬화 처리된, 문자열로 변환된, 결집된 객체 라고 부름
원시값에도 적용 가능
-
일반 객체와 다른 특징
-
문자열은 반드시 큰 따옴표로 감싸야 함
-
객체 프로퍼티 이름은 큰 따옴표로 감싸야 함
-
-
적용할 수 있는 자료형
객체, 배열, 원시형(문자형, 숫자형, 불린형, null)
-
호출 시 무시되는 프로퍼티
-
함수 프로퍼티 (메서드)
-
심볼형 프로퍼티 (키가 심볼인 프로퍼티)
-
값이 undefined 인 프로퍼티
-
-
중첩 객체
알아서 문자열로 변환시켜 줌
-
순환 참조
순환 참조 있을 시 원하는대로 문자열로 바꾸는게 불가능
-
replacer
순환 참조 다뤄는 거와 같이 정환 프로세스 정교하게 조정하려할 때 사용
-
배열
이 프로퍼티들만 JSON 으로 인코딩.
-
함수
프로퍼티 (키, 값) 쌍 전체 대상으로 호출되며 반드시 기존 프로퍼티 값을 대신 사용할 값 반환 필요.
중첩 객체와 배열 요소까지 포함한 모든 키-값 쌍 처리
함수 내 this 는 현재 처리하고 있는 프로퍼티가 위치한 객체
-
-
space
가독성을 높이기 위해 중간에 삽입해줄 공백 문자 수
숫자 만큼 들여쓰기 해줌.
-
커스텀 “toJSON”
객체에 메서드 구현되어 있으면 객체 JSON으로 바꿀 수 있음
JSON.stringify 는 객체내에 toJSON 자동으로 호출
중첩 객체도 구현하여 사용 가능
-
-
JSON.parse
JSON 으로 인코딩된 객체 다시 객체로 디코딩 가능
JSON.parse(str, [reviver])
중첩 객체에도 사용 가능
-
str
JSON 형식의 문자열
-
reviver
모든 (key, value) 쌍 대상으로 호출되는 function(key, value) 형태의 함수로 값 변형 가능
원하는 값만 읽거나 쓰기 가능
-
요약
-
JSON 은 값이나 객체를 나타내주는 범용 포맷으로 복잡한 자료구조를 네트워크를 통해 내보내거나 로깅 목적으로 출력할 때 문자열이 필요한 상황을 만족시키기 위해 나옴
-
JSON.stringify 는 원하는 값 JSON 으로 직렬화
-
JSON.stringify 는 객체에 toJSON 메서드가 있다면 우선 실행
-
JSON.parse 는 JSON 을 본래 값으로 변경 가능
-
stringify, parse 는 두번째 인수에 함수(replacer) 넘겨서 원하는 값만 읽거나 쓰기 가능
-
객체에 toJSON 이라는 메서드 구현되어 있을 시 JSON.stringify 는 자동으로 toJSON 호출