JSON
JavaScript Object Notation (JSON)
은 JavaScript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이며, 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용합니다. (서버에서 클라이언트로 데이터를 전송하여 표현하려거나 반대의 경우)
JSON 이란?
- JavaScript 객체 문법을 따르는 문자 기반의 데이터 포맷
- 하지만, JavaScript 가 아니더라도, JSON 을 읽고 쓸 수 있는 기능이 다수의 프로그래밍 환경에서 제공됨
- 문자열 형태로 존재함 → 네트워크를 통해 전송할 때 아주 유용
- 데이터에 억세스 하기 위해서는 네이티브 JSON 개체로 변환될 필요가 있음 (하지만, JavaScript 는 JSON 전역 객체를 통해 문자열과 JSON 객체의 상호변환을 지원함)
- 개별 JSON 객체를 .json 확장자를 가진 단순 텍스트 파일에 저장할 수 있음. (MIME 타입은 application/json 이다.)
MIME 타입이란 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 매커니즘이다.
문자열에서 네이티브 객체로 변환하는 것을 파싱(Parsing)이라고 한다. 네트워크를 통해 전달할 수 있게 객체를 문자열로 변환하는 과정은 문자열화(Stringification)이라고 한다.
JSON 의 구조
JSON 안에는 JavaScript 객체 리터럴 문법과 마찬가지로 JavaScript 의 기본 데이터 타입인 문자열, 숫자, 배열, 불리언 그리고 다른 객체를 포함할 수 있다.
{
"name" : "kwah",
"favoriteSportsTeam" : "Real Madrid CF",
"favoritePlayers" : [
{
"playerName" : "Vinicious Jr.",
"division" : "La Liga Santander",
"clubName" : "Real Madrid CF",
"backNumber" : "20",
"position" : "FW",
"nationality" : "Brazil"
},
{
"playerName" : "Sergio Ramos",
"division" : "LIGUE 1 Uber Eats",
"clubName" : "Paris Saint-Germain FC",
"backNumber" : "4",
"position" : "CB",
"nationality" : "Spain"
},
{
"playerName" : "Luka Modrić",
"division" : "La Liga Santander",
"clubName" : "Real Madrid CF",
"backNumber" : "10",
"position" : "MF",
"nationality" : "Croatia"
},
{
"playerName" : "Toni Kroos",
"division" : "La Liga Santander",
"clubName" : "Real Madrid CF",
"backNumber" : "8",
"position" : "MF",
"nationality" : "Germany"
}
]
}
이 객체를 JavaScript 프로그램에서 로드하고, football
이라는 이름의 변수에 파싱하면 dot / bracket notation 을 통해서 객체 내의 데이터에 접근할 수 있게 된다.
football.favoriteSportsTeam
football['active']
하위 계층의 데이터에 접근시에는, 간단하게 프로퍼티 이름과 배열 인덱스의 체인을 통해서 접근할 수 있다. 예를 들어, football
의 2번째 favoritePlayers
에 접근하려면 다음과 같이 하면 된다.
football['favoritePlayers'][1]
- 변수 이름을 지정한다.
- 변수 내의 프로퍼티에 접근하려면
["해당 프로퍼티"]
를 입력한다. - 만약 해당 프로퍼티가 객체로 구성된 배열이면, 뒤에
[1]
을 입력한다. (인덱스이기 때문에 2가 아닌 1이다.)
'etc' 카테고리의 다른 글
PowerMockup (0) | 2023.06.05 |
---|---|
디자인 패턴과 프레임워크 (0) | 2023.02.02 |
HTTP (0) | 2022.08.21 |
HTTP 요청과 응답 (0) | 2022.08.21 |
클라이언트와 서버 (0) | 2022.08.18 |