JSON
JavaScript Object Notation
JavaScript 객체 문법으로 구조화된 데이터교환 형식
여러 언어에서 데이터 교환형식으로 쓰이며 객체문법 말고도 단순 배열, 문자열도 표현 가능합니다.
{key: value}로 구성 되어있습니다.
추가로
이미 존재하는 키를 중복선언하면 나중에 선언한 해당에 대응한 값이 덮어쓰이게 된다.
이유는? JS는 위에서 아래로 코드를 읽기 때문이며, 키는 하나만 존재 가능하기 때문입니다.
예시) 'name':'john'이라는 키와 벨류가 있다.
{
'name' : 'jhon',
'name' : 'james'
}
// 결과 : 'name' : 'james'
Quiz 1. 다음 코드를 보고 json을 불러왔을 때의 모습은?
[
{
'name' : 'jhon',
'name2' : 'james'
},
{
'name' : 'jhon',
'name' : 'james'
}
]
(정답은 맨 밑에 있어요)
각 언어는 각 언어에 맞는 객체로만 읽을 수 있다.
그렇기 때문에 JSON이라는 공통언어를 가져와서 자기 언어로 가져와서 변환하여 사용하는 것이다.
JSON 문자열 -> 자바 객체로 변환하는 과정을 역직렬화한다고 할 수 있습니다.
// Jackson 라이브러리 사용 예시
ObjectMapper mapper = new ObjectMapper();
MyClass myObject = mapper.readValue(jsonString, MyClass.class);
// Gson 라이브러리 사용 예시
Gson gson = new Gson();
MyClass myObject = gson.fromJson(jsonString, MyClass.class);
자바 객체 -> JSON 문자열로 변환하는 과정을 직렬화라고 합니다.
// Jackson 사용
String json = mapper.writeValueAsString(myObject);
// Gson 사용
String json = gson.toJson(myObject);
Quiz 2. JavaScript에 있던 데이터를 Java에서 사용하려고 합니다. 이 프로세스를 간단하게 얘기해봅시다.
(정답은 맨 밑에 있어요)
ex 문자)
"이건 그냥 문자인데 그래도 되나요? 됩니다"
ex 배열)
[1, 2, 3, 4]
ex 숫자)
27
맨 첫글에도 쓰여있듯이 JSON의 핵심은 데이터에 의미를 부여하고 구조화이기 때문입니다.

spotify에서 삐딱하게라는 곡을 클릭하여 가져온 캡쳐 사진입니다.
JSON으로 이 데이터를 표현한다면 어떤 식일까요?
"쿠데타(COUP D'ETAT)" : [
{
"title": "삐딱하게(Crooked)",
"artist": "G-DRAGON",
"year": 2013,
"viewed": 104628515
"image": "coup 타이틀 이미지"
}
]
완벽하진 않지만 이런 식으로 표현될겁니다.
만약 key value로 의미를 부여하지 않았다면?
데이터를 주고 받을 때 원하는 곳에 사용하기 쉽지 않을 겁니다.
{
{
"name": "용가리", // 문자열
"age": 27, // 숫자
"hobby": { //재귀하여 또 key value~
"developing": ["java", "mysql", "javascript"],
"sports": ["soccer", "tennis", "weight"]
}
}
}
예시)
"[
{
"name": "용가리", // 문자열
"age": 27, // 숫자
},
{
"name": "용가리2", // 문자열
"age": "27", // 문자열
};
]
예시의 age를 보면 하나는 숫자, 다른 하는 문자열임에도 문제가 없습니다.
그 이유가 JSON은 느슨한 타입이기 때문입니다.
하지만 이 방법은 굉장히 조심해야합니다.
저는 주로 자바와 MySQL을 사용하는데 변환할 때 이렇게 서로 다르면 타입 오류가 생길 수 밖에 없습니다.
여지껏 설명과 같이 서로 다른 언어끼리 데이터를 교환하는데 장점을 두고 있습니다.
Quiz 1 정답: [{'name':'jhon','name2':'james'},{'name':'james']
Quiz 2 정답: JavaScript에서 직렬화하여 JSON으로 변환한 후 Java에서 JSON 데이터를 역직렬화하여 사용하면 됩니다.