본문 바로가기

Develop/Data

JSON

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) 문자열은 '가 아닌 "로 감싸야 한다.