Javascript Object Notation의 의미로 데이터를 저장하거나, 전송할 때 가장 많이 사용되는 경량의 data 교환 형식이다. JS에서 객체를 만들 때 사용하는 표현식을 의미한다.
JSON표현식은 사람과 기계 모두 이해하기 쉽고 용량이 작아서 최근에는 JSON이 XML을 대체해서 데이터 전송 등에 많이 사용된다.
JSON은 데이터 포맷일 뿐이며 어떠한 통신 방법도, 프로그래밍 문법도 아닌, 단순 데이터를 표시하는 표현 방법일 뿐이다.
데이터를 나타낼 수 있는 방법은 여러가지가 있지만, 대표적인 것은 XML이고, 그 다음 JSON
{
"employees": [
{
"name": "Surim",
"lastName": "Son"
},
{
"name": "Someone",
"lastName": "Huh"
},
{
"name": "Someone else",
"lastName": "Kim"
}
]
}
{string key : string value}
의 형태 {
"firstName": "Kwon",
"lastName": "YoungJae",
"email": "kyoje11@gmail.com"
}
[value1, value2, ...]
의 형태 {
"firstName": "Kwon",
"lastName": "YoungJae",
"email": "kyoje11@gmail.com",
"hobby": ["puzzles","swimming"]
}
JSON으로 가져올 수 있는 데이터는 해당 자바스크립트가 로드된 서버의 데이터에 한정된다.
예를들어, http://kwz.kr/json.js
에서 불러올 수 있는 데이터는 kwz.kr 서버에 존재하는 것만 불러올 수 있다. (구글 데이터를 불러오거나, 네이버 데이터를 불러오거나 할 수 없다)
JSON은 단순히 데이터 포맷일 뿐이며 그 데이터를 불러오기 위해선 XMLHttpRequest() / Fetch 라는 자바스크립트 함수를 사용해야 하는데, 이 함수가 동일 서버에 대한 것만 지원하기 때문이다.
변환
JSON.parse( JSON으로 변환할 문자열 ) : JSON 형식의 텍스트를 자바스크립트 객체로 변환한다.
JSON.stringify( JSON 문자열로 변환할 값 ) : 자바스크립트 객체를 JSON 텍스트로 변환한다.
var jsonText = '{ "name": "Someone else", "lastName": "Kim" }'; // JSON 형식의 문자열
var realObject = JSON.parse(jsonText);
var jsonText2 = JSON.stringify(realObject);
console.log(realObject); // {name: "Someone else", lastName: "Kim"}
console.log(jsonText2); // {"name":"Someone else","lastName":"Kim"}
JSON 문자열 구문을 분석하고, 그 결과에서 자바스크립트 값 / 객체를 생성한다.
const json = '{"result":true, "count":42}';
const obj = JSON.parse(json);
console.log(obj.count);
// expected output: 42
console.log(obj.result);
// expected output: true
자바스크립트 값 / 객체를 JSON 문자열로 변환한다!
console.log(JSON.stringify({ x: 5, y: 6 }));
// expected output: "{"x":5,"y":6}"
console.log(JSON.stringify([new Number(3), new String('false'), new Boolean(false)]));
// expected output: "[3,"false",false]"
console.log(JSON.stringify({ x: [10, undefined, function(){}, Symbol('')] }));
// expected output: "{"x":[10,null,null,null]}"
console.log(JSON.stringify(new Date(2006, 0, 2, 15, 4, 5)));
// expected output: ""2006-01-02T15:04:05.000Z""