-
[Flutter][Json직렬화] 수동 직렬화Flutter 2022. 6. 29. 14:19728x90
직렬화란 무엇일까? 네트워크 요청에서 직렬화란 '프로그래밍 언어의 객체를 네트워크로 전송할 수 있도록 가벼운 표준 데이터 형식으로 변환함'을 의미한다. 플러터는 직렬화를 수동 직렬화 또는 패키지를 이용한 직렬화 자동 생성 두가지 방법으로 수행하는데 오늘은 수동직렬화에 대해서 조금 알아보고자 한다.
실습에 들어가기 앞서 준비물이 필요한데 http패키지와 간단하게 json 객체를 받아올 수 있는 사이트다.
http://jsonplaceholder.typicode.com/
객체를 Ui에서 사용하려면 데이터를 얻어와 다트 객체로 변환해야한다. 그 과정은 세가지로 요약할 수 있는데 다음과 같다.
1. http를 통해 json 형식의 데이터를 얻어온다.
2.json을 일반 dart 객체로 파싱한다.
3. 객체를 특정 형식(Commend)로 변환한다.
class Comments{ String name; String email; String body; Comments({required this.body,required this.name,required this.email}); //json맵의 키를 클래스의 프로퍼티로 사용한다 factory Comments.fromJson(Map<String,dynamic> json){ return Comments( // Comments 클래스의 각 프로퍼티에 json에서 추출한 대응된 프로퍼티를 저장한다. name: json["name"] as String, email: json["email"] as String, body: json["body"] as String ); } }
fromJson : map 구조에서 새로운 객체를 생성하기 위한 생성자
Future<List<Comments>> getJson() async { const url = "http://jsonplaceholder.typicode.com/comments"; // final response = await http.get(Uri.parse(url)); if (response.statusCode == 200) { //서버 요청이 정상이면 json 파싱 List body = jsonDecode(response.body); final post = body.map((e) => Comments.fromJson(e)).toList(); return post; } else { throw Exception("Find error"); } }
직렬화를 하지않으면 받아올 데이터가 많을 경우 클래스를 여러개 만들어야하는 번거로움이 생길 수 있습니다. 직렬화를 사용한다면 그 번거로움을 줄일 수 있고 더 나아가 수정이 필요할 때 용의합니다.
728x90'Flutter' 카테고리의 다른 글
[Flutter] Error running process: CreateProcess faild Code2 해결방법 (0) 2022.05.21 [Flutter] 플러터 이미지 확대하기 InteractiveViewer를 활용하자. (0) 2022.02.19 [Flutter] [WARNING] Easy Localization: Localization key [XXX] not found 해결하기 (1) 2022.02.03 [Flutter] Container 둥글기 주기,그림자 효과 border,shadow (0) 2022.01.12 [Flutter] flutter 상태바(Status Bar) 숨기기 (0) 2022.01.10