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
'Dart' 카테고리의 다른 글
[Dart] 예외 처리 (Error Handling) (0) | 2025.03.17 |
---|---|
[Dart] 상속 (Inheritance) (0) | 2025.03.14 |
[Dart] 객체지향 프로그래밍: 클래스, 속성, 메서드, 생성자 (Class, Property, Method, Constructor) (0) | 2025.03.13 |
[Dart] 함수형 프로그래밍 (Functional Programming) (0) | 2025.03.12 |
[Dart] 제네릭 (Generics) - 제네릭 함수 & 클래스 (0) | 2025.03.12 |
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
'Dart' 카테고리의 다른 글
[Dart] 예외 처리 (Error Handling) (0) | 2025.03.17 |
---|---|
[Dart] 상속 (Inheritance) (0) | 2025.03.14 |
[Dart] 객체지향 프로그래밍: 클래스, 속성, 메서드, 생성자 (Class, Property, Method, Constructor) (0) | 2025.03.13 |
[Dart] 함수형 프로그래밍 (Functional Programming) (0) | 2025.03.12 |
[Dart] 제네릭 (Generics) - 제네릭 함수 & 클래스 (0) | 2025.03.12 |