Dart에서 JSON 데이터를 효과적으로 처리하기 위해서는 직렬화(Serialization)와 역직렬화(Deserialization) 개념을 이해하는 것이 중요합니다. JSON 포맷을 통해 데이터를 주고받을 때 이 과정을 통해 데이터를 쉽게 변환하고 사용할 수 있습니다.
String data = '{"name":"철수", "age":10}';
String name = data.substring(9, 11);
print(name); // "철수"
String
이므로 다른 타입의 내장 메소드를 사용할 수 없는 경우import 'dart:convert';
class Person {
final String name;
final int age;
const Person({
required this.name,
required this.age,
});
// Map<String, dynamic>을 JSON 포맷 문자열로 직렬화 (Serialization)
Map<String, dynamic> toJson() {
return {
"name": name,
"age": age,
};
}
}
void main() {
// Person 인스턴스 생성
Person person = Person(name: "철수", age: 10);
// Person -> Map<String, dynamic>
Map<String, dynamic> personMap = person.toJson();
print(personMap);
// Map<String, dynamic> -> JSON 포맷 String
String personString = jsonEncode(personMap);
print(personString);
}
import 'dart:convert';
class Person {
final String name;
final int age;
const Person({
required this.name,
required this.age,
});
// JSON 포맷 문자열을 Map<String, dynamic>으로 역직렬화 (Deserialization)
factory Person.fromJson(Map<String, dynamic> json) {
return Person(
name: json['name'],
age: json['age'],
);
}
}
void main() {
// 네트워크 응답 문자열
String jsonString = '{"name": "철수", "age": 10}';
// JSON 포맷 String -> Map<String, dynamic>
Map<String, dynamic> jsonMap = jsonDecode(jsonString);
print(jsonMap);
// Map<String, dynamic> -> Person
Person person = Person.fromJson(jsonMap);
print(person.name); // 철수
print(person.age); // 10
}
dart:convert
패키지의 jsonEncode()
와 jsonDecode()
함수를 사용하여 JSON 데이터의 직렬화와 역직렬화를 간편하게 수행할 수 있습니다.toJson()
메서드를 정의하여 사용합니다.fromJson()
팩토리 생성자를 정의하여 사용합니다.이렇게 JSON 포맷을 이용해 데이터를 직렬화 및 역직렬화함으로써 네트워크를 통해 데이터를 쉽게 주고받을 수 있습니다.