[JSON]
- JSON은 Javascript 객체 문법을 따르는 문자 기반의 구조화된 데이터 포맷 입니다.
(javascript가 아니더라도 읽고 쓸수는 있다.)
- 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용합니다.
(서버에서 클라이언트로 데이터를 전송하여 표현하려거나 반대의 경우)
- 개별 JSON객체를 .json확장자를 가진 단순 텍스트 파일에 저장할 수 있습니다.
문자열에서 네이티브 객체로 변환하는 것은 파싱(Parsing)이라고 합니다. 네트워크를 통해 전달할 수 있게 객체를 문자열로 변환하는 과정은 문자열화(Stringification)이라고 합니다.
네이티브 객체
- 네이티브객체는 호스트 환경 아니라 ECMAScript의 스펙에 의해서 정의된 객체입니다.
- NOTE 표준 네이티브객체는 위에 언급한 스펙으로 정의되어 있습니다. 약간의 네이티브객체들은 빌트인이고 나머지는 ECMAScipt 프로그램이 실행되는 동안 구성됩니다.
- 예시: Object (constructor), Date, Math, parseInt, eval, string methods like indexOf and replace, array methods, ....
호스트 객체
- ECMASrcipt의 실행 환경을 만들기위해 호스트 환경에서 제공된 객체입니다.
- NOTE 네이티브객체가 아니면 호스트객체 입니다.
- 예시(브라우저 환경일 때): window, document, location, history, XMLHttpRequest, setTimeout, getElementsByTagName, querySelectorAll, …
ECMA스크립트
- ECMA스크립트란: ECMA-262 기술 규격에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어를 말한다. (스크립트 언어 → 응용프로그램을 제어하기위한 언어)
- 자바스크립트를 표준화하기 위해 만들어졌다.
[JSON 구조]
예시) super hero squad
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
- 이 객체를 Javascript 프로그램에서 로드하고, 예를 들어 superHeroes라는 이름의 변수에 파싱하면
점 브라켓 표기법을 통해 접근 가능하다.
- superHerpes의 두번째 member의 세번째 power에 접근하고자 한다.
superHeroes['members'][1]['powers'][2]
JAVAscript 개체속성 액세스 방법
점 표기법
let obj = {
cat: 'meow',
dog: 'woof'
};
let dog = 'cat';
let sound = obj.dog;
console.log(sound);
// woof
- 속성 식별은 영숫자(및 _ 및 $)만 가능합니다.
- 속성 식별자는 숫자로 시작할 수 없습니다.
- 속성 식별자는 변수를 포함 할 수 없습니다.
- 확인 — obj.prop_1 , obj.prop$
- 확인 — obj.1prop , obj.prop name
대괄호 표기법(브라켓 표기법)
let obj = {
cat: 'meow',
dog: 'woof'
};
let dog = 'cat';
let sound = obj[dog];
console.log(sound);
// meow
- 속성 식별자는 문자열 또는 문자열을 참조하는 변수 여야합니다.
- 숫자로 시작하는 변수, 공백 및 문자열을 사용하는 것은 괜찮습니다.
- 확인 — obj["1prop"] , obj["prop name"]
점과 브라켓 표기법의 차이점
점 표기법으로 조회를 시도할때는 실제 변수 값을 찾는게 아닌 객체내에서 문자열 값을 찾습니다!!
● 위 예시코드들에서 console.log를 실행했을때
1. 점표기법 ⇒ 변수'dog'의 값이 아닌 객체 내의 'dog'문자열 값을 조회 ⇒ 호출: 'woof'
2. 브라켓 표기법 ⇒ 변수'dog'의 값에 접근 후 조회 ⇒ 호출: 'meow'
[JSON 특징]
- JSON은 순수히 데이터 포맷입니다. 오직 프로퍼티만 담을 수 있습니다. 메서드는 담을 수 없습니다.
- JSON은 문자열과 프로퍼티의 이름 작성시 큰 따옴표만을 사용해야 합니다. 작은 따옴표는 사용불가합니다.
- 콤마나 콜론을 잘못 배치하는 사소한 실수로 인해 JSON파일이 잘못되어 작동하지 않을 수 있습니다.
JSONLint같은 어플리케이션을 사용해 JSON 유효성 검사를 할 수 있습니다.
- JSON은 JSON내부에 포함할 수 있는 모든 형태의 데이터 타입을 취할 수 있습니다. 즉, 배열이나 오브젝트 외에도 단일 문자열이나 숫자또한 유효한 JSON 오브젝트가 됩니다.
- 자바스크립트에서 오브젝트 프로퍼티가 따옴표로 묶이지 않을 수도 있는 것과는 달리, JSON에서는 따옴표로 묶인 문자열만이 프로퍼티로 사용될 수 있습니다.
프로퍼티와 메서드
프로퍼티
- 프로퍼티(property)는 일부 객체 지향 프로그래밍 언어에서 필드(데이터 멤버)와 메소드 간 기능의 중간인 클래스 멤버의 특수한 유형이다.
- 프로퍼티의 읽기와 쓰기는 일반적으로 게터(getter)와 세터(setter) 메소드 호출로 변환된다.
메서드
- 메서드(method) 또는 멤버 함수(member function)는 객체 지향 프로그래밍에서 객체과 관련된 서브 루틴 (또는 함수)이다.
- 데이터와 멤버 변수에 대한 접근 권한을 갖는다.
( 참조: https://www.notion.so/JSON-845890c53aa1454ea00ee04a8fd28d2c )