어떤 언어에서든 데이터 구조와 실제 데이터를 다른 언어 및 플랫폼에서 해석 가능한 형식으로 전송할 수 있어야 합니다. JSON(JavaScript Object Notation)은 이를 가능케 하는 데이터 교환 포맷입니다. _JSON | OCI
JSON은 다른 언어 및 플랫폼으로부터 독립적이다. 원래 JSON은 본래 자바스크립트에서 사용할 목적으로 만들어진 포맷이라고 한다. 사람이 읽고 쓰기에 용이하고 컴퓨터의 처리 속도가 빠른 텍스트 기반의 방식이다.
{}
key
와 값 value
의 쌍으로 이루어진다.,
로 나열된다. null
, 객체, 배열을 지원한다. {}
)로 둘러쌓아 표현한다.[]
)로 둘러쌓아 표현한다.
// 아래 주석은 설명을 위한 표기이다.
// JSON은 주석을 지원하지 않는다!
// 문자열
{ "name" : "Jones" }
// 숫자
{ "number_1" : 210 }
// 부울
{ "isTrue" : false }
// Null, Null은 빈 값이다. 키에 어떤 값도 할당되어 있지 않은 경우 Null로 취급
{ "void" : null }
// 객체
{
"Influencer" : {
"name" : "Jaxon",
"age" : "42",
"city": "seoul",
}
}
// 배열
{
"Influencers" : [
{
"name" : "Jaxon",
"age" : 42,
"Works At" : "Tech News"
},
{
"name" : "Miller",
"age" : 35
"Works At" : "IT Day"
}
]
}
JSON.stringify
를 사용하면 원하는 값을 JSON으로 직렬화(문자열) 할 수 있다.
let json = JSON.stringify(value[, replacer, space])
let cafe = {
name: "RiverOnYou",
room: {
number: 50,
participants: ["mina", "jeon"]
}
};
let json = JSON.stringify(cafe)
// '{"name":"RiverOnYou","room":{"number":50,"participants":["mina","jeon"]}}'
let cafe = {
name: "RiverOnYou",
}
let room = {
number: 50,
participants: ["mina", "jeon"]
}
room.cafe = cafe
cafe.room = room
JSON.stringify(cafe); // Uncaught TypeError: Converting circular structure to JSON
순환참조가 있을 경우, 변환하길 원하는 프로퍼티가 담긴 배열을 넘겨준다.
// 순환참조에 해당하는 room.cafe를 제외한다.
let json = JSON.stringify(room, ['cafe', 'name', 'number', 'participants'])
// '{"cafe":{"name":"RiverOnYou"},"number":50,"participants":["mina","jeon"]}'
space로 중간에 삽입할 공백 문자 수를 입력하여 가독성을 높인다.
let json = JSON.stringify(cafe, null, 2)
// '{\n "name": "RiverOnYou",\n "room": {\n "number": 50,\n "participants": [\n "mina",\n "jeon"\n ]\n }\n}'
JSON.parse
를 사용하면 JSON을 본래 값(배열, 객체)으로 역 직렬화 할 수 있다.
let parsed = JSON.parse(str, [reviver]);
let userData = '{ "name": "mina", "age": 35, "friends": ["jeon", "chea"] }';
let parsedUserData = JSON.parse(userData)
parsedUserData.name // 'mina'
만약 다음과 같이 Date 객체가 있다면, JSON에게 문자열이 아닌 객체라는 것을 알린다.
let str = '{"title":"RiverOnYou","date":"Sat Jul 30 2022 18:56:30 GMT+0900 (한국 표준시)"}';
let meet = JSON.parse(str, function(key, value) {
if (key == 'date') return new Date(value);
return value;
})
meet.date.getDate()
// 30
key
와 value
는 “”
큰 따옴표로 감싸주어야 한다. new
키워드를 사용할 수 없다. 순수 값(bare value)만 가능하다. CRLF
/ LF
에 따라 JSON 텍스트가 동일하지 않을 수 있다. 참고 | CRLF LF로 생긴 문제 해결하기