Dart

[Dart] JSON 직렬화, 역직렬화

Meezzi 2025. 4. 10. 23:22
728x90

 

1. JSON 

JSON(JavaScript Object Notation)은 데이터를주고 받을때 쓰는 문자 기반의 데이터 포맷입니다.    

 

JavaScript라고 꼭 JavaScript에서만 쓰는 것은 아니고, 모든 플랫폼과 언어에서 호환이 가능해 사실상 표준처럼 많이 쓰입니다.

 

JSON은 중괄호 안에 key-value가 쌍으로 저장되어 있습니다.

 

{
	"name" : "Alice",
	"age" : 20
}

 

key는 반드시 문자열이 들어가야 하고,

value에는 숫자, 문자열 리스트, 객체 등 다양한 데이터 타입이 올 수 있습니다.

 

 

 

2. 직렬화와 역직렬화

앱을 만들다 보면 서버랑 데이터를 주고받게 되는데 서버에서 보내주는 정보는 보통 JSON 형식의 문자열입니다.

 

직렬화(Serialization)는 객체를 JSON 문자열로 바꾸는 것으로

서버로 데이터를 보낼 때 사용합니다.

 

역직렬화(Deserialization)는 JSON 문자열을 객체로 바꾸는 것으로

서버에서 받은 데이터를 앱에서 사용할 수 있도록 변환해야합니다.

 

변환 흐름은다음과 같습니다.

 

JSON 문자열 -> Map -> Dart 객체

Dart 객체-> Map -> JSON 문자열

 

Dart에서는 encode를 이용해서 객체를 Map으로 변환하고,

decode를 이용하여 Map을 객체로 변환합니다. 

 

.    

3. 예제

class User {
  final String name;
  final int age;

  User({required this.name, required this.age});

  // 역직렬화
  // Map을 User 객체로 변환
  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      age: json['age'],
    );
  }

  // 직렬화
  // User를 Map으로 변환
  Map<String, dynamic> toJson() {
    return {
      'name': name,
      'age': age,
    };
  }
}

 

 

 

void main() {
  // JSON -> Map -> User 객체 (역직렬화)
  String jsonString = '{"name": "Alice", "age": 30}';
  Map<String, dynamic> userMap = jsonDecode(jsonString);
  User user = User.fromJson(userMap);
  print(user.name);	// Alice

  // User 객체 -> Map -> JSON (직렬화)
  String encoded = jsonEncode(user.toJson());
  print(encoded); // {"name":"Alice","age":30}
}

 

 

 

4. 정리

변환 내용 사용 함수 예시 코드
JSON 문자열 → Map jsonDecode() jsonDecode(jsonStr)
Map → 객체 fromJson() Person.fromJson(map)
객체 → Map toJson() person.toJson()
Map → JSON 문자열 jsonEncode() jsonEncode(map)

 

 

 

 

5. 참고 자료

https://docs.flutter.dev/data-and-backend/serialization/json

 

JSON and serialization

How to use JSON with Flutter.

docs.flutter.dev

 

728x90