JSON(JavaScript Object Notation)
- JSON은 좀 더 쉽게 데이터를 교환하고 저장하기 위하여 만들어진 텍스트 기반의 데이터 교환 표준
- JSON은 텍스트 기반이므로 어떠한 프로그래밍 언어에서도 JSON데이터를 읽고 사용 가능
JSON의 특징
- JSON은 JS를 확장하여 만들어졌다.
- JSON은 JS 객체 표기법을 따른다.
- JSON은 사람과 기계가 모두 읽기 편하도록 고안되었다.
- JSON은 프로그래밍 언어와 운영체제에 독립적이다.
JSON 타입
- Number
- String
- Boolean
- Object
- Array
- Null
JSON 예시
기본
{
"age": 30,
"weight": 68.2,
"marriage": false
}
객체 표현
{
"dateOfBirth": {
"year": 1980,
"month": 10,
"date": 21
}
}
배열 표현
{
"dayOfWeek": [
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
"day": [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31
]
}
JSON method
JSON.stringify : 객체 → JSON
JSON.parse : JSON → 객체
JSON.stringify 예제
let student = {
name: 'John',
age: 30,
isAdmin: false,
courses: ['html', 'css', 'js'],
wife: null
};
let json = JSON.stringify(student);
alert(typeof json); // 문자열이네요!
alert(json);
/* JSON으로 인코딩된 객체: 모두 " 쌍 따옴표가 들어가 있음!
{
"name": "John",
"age": 30,
"isAdmin": false,
"courses": ["html", "css", "js"],
"wife": null
}
*/
위 결과에서 확인할 수 있듯이 JSON.stringgify method를 사용하면 문자열로 바뀌는 것을 확인할 수 있다.(name → "name", 'John' → "John"을 보면 확인할 수 있다.)
위와 같이 정상적으로 호출이 되는 것이 있는 반면 'JSON.stringify'를 사용했을 때 무시되어 출력 되는 경우가 존재한다.
1. method
2. symbol
3. undefined
ignore
let user = {
sayHi() { // 함수 무시
alert("Hello");
},
[Symbol("id")]: 123, // 심볼 무시
something: undefined // undefined 무시
};
alert( JSON.stringify(user) ); // {} (빈 객체가 출력됨)
toJSON
toString을 사용해 객체를 문자형으로 변환시키는 것처럼, 객체에 toJSON이라는 메서드가 구현되어 있으면 객체를 JSON으로 바꿀 수 있다.
여기서 JSON.stringify는 이런 경우를 감지하고 toJSON을 자동으로 호출한다.
JSON.parse
parse 예제
let rabbit = {
name : 'tori',
color : 'white',
size : null,
participants: [{name: "John"}, {name: "Alice"}],
birthDate : new Date(),
jump : () => { // 함수는 스트링화 안됨.
return 100;
}
}
let json = JSON.stringify(rabbit);
let obj = JSON.parse(json);
// {name: "tori", color: "white", size: null, participants: Array(2), birthDate: "2021-08-03T04:00:06.965Z"}
parse 예제
// 문자열로 변환된 배열
let numbers = "[0, 1, 2, 3]";
numbers = JSON.parse(numbers);
numbers[1]; // 1
let userData = '{ "name": "John", "age": 35, "isAdmin": false, "friends": [0,1,2,3] }';
let user = JSON.parse(userData);
alert( user.friends[1] ); // 1
꼭 JSON타입이 아니더라도, 문자열 타입의 데이터가 있다면 변환이 가능하다.
but JSON 포맷으로 data가 만들어져 있어야한다.
ex) 문자열은 '가 아닌 "로 감싸야 한다.