JSON과 직렬화/역직렬화

Yong Lee·2025년 9월 5일

JSON
JavaScript Object Notation
JavaScript 객체 문법으로 구조화된 데이터교환 형식
여러 언어에서 데이터 교환형식으로 쓰이며 객체문법 말고도 단순 배열, 문자열도 표현 가능합니다.

JS 객체 문법의 특징

{key: value}로 구성 되어있습니다.
추가로
이미 존재하는 키를 중복선언하면 나중에 선언한 해당에 대응한 값이 덮어쓰이게 된다.
이유는? JS는 위에서 아래로 코드를 읽기 때문이며, 키는 하나만 존재 가능하기 때문입니다.
예시) 'name':'john'이라는 키와 벨류가 있다.

{
  'name' : 'jhon',
  'name' : 'james'
}
// 결과 : 'name' : 'james'

Quiz 1. 다음 코드를 보고 json을 불러왔을 때의 모습은?

[
	{
	  'name' : 'jhon',
	  'name2' : 'james'
	},
    {
	  'name' : 'jhon',
	  'name' : 'james'
	}
]

(정답은 맨 밑에 있어요)

JSON은 어떻게 여러 언어에서 사용 가능할까?

각 언어는 각 언어에 맞는 객체로만 읽을 수 있다.
그렇기 때문에 JSON이라는 공통언어를 가져와서 자기 언어로 가져와서 변환하여 사용하는 것이다.

JSON parsing(역직렬화)

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 생성(직렬화)

자바 객체 -> JSON 문자열로 변환하는 과정을 직렬화라고 합니다.

// Jackson 사용
String json = mapper.writeValueAsString(myObject);

// Gson 사용
String json = gson.toJson(myObject);

Quiz 2. JavaScript에 있던 데이터를 Java에서 사용하려고 합니다. 이 프로세스를 간단하게 얘기해봅시다.
(정답은 맨 밑에 있어요)

JSON은 사실 key, value 아니여도 표현할 수 있다!?

JSON은 숫자, 문자, 배열까지 다 허용됩니다.

ex 문자)
"이건 그냥 문자인데 그래도 되나요? 됩니다"

ex 배열)
[1, 2, 3, 4]

ex 숫자)
27

key value가 핵심인 이유

맨 첫글에도 쓰여있듯이 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"]
      }
  	}
}

주의 할 점

JSON 느슨한 타입

예시)

"[
	{
	  "name": "용가리",           // 문자열
	  "age": 27,                 // 숫자
	},
	{
	  "name": "용가리2",           // 문자열
	  "age": "27",                 // 문자열
	};
]

예시의 age를 보면 하나는 숫자, 다른 하는 문자열임에도 문제가 없습니다.
그 이유가 JSON은 느슨한 타입이기 때문입니다.
하지만 이 방법은 굉장히 조심해야합니다.
저는 주로 자바와 MySQL을 사용하는데 변환할 때 이렇게 서로 다르면 타입 오류가 생길 수 밖에 없습니다.

JSON에서 사용할 수 있는 타입

  • number
  • String
  • boolean
  • array
  • object
  • null

JSON의 활용

여지껏 설명과 같이 서로 다른 언어끼리 데이터를 교환하는데 장점을 두고 있습니다.

  • API에서 사용
    • 백엔드에서 요청을 받으면서 얻는 데이터
    • 백엔드에서 요청받은 것의 대한 응답을 프론트엔드에 제공할 때 데이터
  • 시스템을 구성하는 설정파일
    • package.json

Quiz 정답

  • Quiz 1 정답: [{'name':'jhon','name2':'james'},{'name':'james']

  • Quiz 2 정답: JavaScript에서 직렬화하여 JSON으로 변환한 후 Java에서 JSON 데이터를 역직렬화하여 사용하면 됩니다.

profile
오늘은 어떤 새로운 것이 나를 즐겁게 할까?

0개의 댓글