728x90
JSON(JavaScript Object Notation)은 데이터를 표현하는 규칙이다.
- 문자열에서 단따옴표('문자열')가 아닌 쌍따옴표("문자열")을 사용해야 한다.
- 네트워크를 통해 다른 컴퓨터로 데이터 전송할 때 일련의 바이트(문자열)로 전달한다.
역직렬화(Deserialization) : 일련의 문자열 → Dart 클래스
직렬화(Serialization) : Dart 클래스 → 일련의 문자열
역직렬화(Deserialization) 진행 순서
- JSON 포맷 String → Map<String, dynamic>
- Map<String, dynamic> → Person 클래스
JSON 포맷 문자열이기 때문에 jsonDecode() 함수를 이용하면 Map<String, dynamic>으로 손쉽게 변경할 수 있다.
import 'dart:convert';
class Person {
final String name;
final int age;
const Person({
required this.name,
required this.age,
});
// factory 키워드를 붙여 생성자 메소드로 만들 수 있으며, 다음 규칙을 지켜야 한다.
// 클래스 인스턴스를 반환해야 한다.
// 메소드명을 클래스명.메소드명() 형태로 작성해야 한다.
factory Person.fromJson(Map<String, dynamic> json) {
return Person(
name: json['name'],
age: json['age'],
);
}
// 클래스의 인스턴스를 Map<String, dynamic>으로 변경하는 함수는
// 일반적으로 클래스에 toJson() 메소드를 만들어 진행한다. Map<String, dynamic> toJson() {
return {
"name": name,
"age": 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);
// Person -> Map<String, dynamic>
Map<String, dynamic> personMap = person.toJson();
print(personMap);
// jsonEncode() 함수를 이용하면 Map<String, dynamic>을
// JSON 포맷 String으로 변경할 수 있다. // Map<String, dynamic> -> JSON 포맷 String
String personString = jsonEncode(personMap);
print(personString);
}
|
728x90
'Flutter 앱 > Dart 언어' 카테고리의 다른 글
Dart mixin (0) | 2023.12.11 |
---|---|
getter & setter (0) | 2023.12.09 |
Dart 3.0 records (0) | 2023.10.19 |
Dart Collection (0) | 2022.06.28 |
Dart Class(클래스) (0) | 2022.06.27 |