Flutter 모델 클래스에서 JSON 직렬화

Jocy·2022년 8월 7일
0
post-thumbnail

JSON 직렬화를 활용한 서버와의 통신

웹 서버와 통신하는 서비스라면 JSON을 사용하게 됩니다. 그렇기 때문에 구조화된 데이터를 적절하게 변경하여서 사용 해야하는 경우도 빈번하게 일어납니다. 앱에서도 통신 할 때도 일반적으로 JSON을 사용하게 됩니다.

  • 인코딩, 직렬화자료구조문자열변환 합니다.
  • 디코딩, 역직렬화 는 문자열자료 구조로 변환하는 반대 과정입니다.

직렬화는 일반적으로 자료구조를 보다 읽기 쉬운 형태로 변환하는 과정을 말하기도 합니다.

데이터 구조를 읽기 쉬운 형식으로 변환하여서 사용한다면 읽기 쉬운 형태로 변환할 수 있을 뿐만 아니라
인스턴스 내부에 잘못된 값들을 입력할때 디버깅을 하는데에도 용이 합니다.

Fluuter 에서 사용한 JSON Decode, Encode 사용 관련 코드

패키지 dart:convert를 이용해 수동으로 JSON을 직렬화하였습니다.

아래의 코드는 Flutter에서 직렬화, 역직렬화를 하는 과정에서 사용되는 함수들에 들어가는 인자들의 타입(Map, 인스턴스, 문자열)에 따라 어떤 결과값이 나오는지 정리한 코드입니다.

import 'package:flutter/material.dart';
import 'dart:convert'; // jsonDecode 관련 패키지

class User {
  final String name;
  final String email;

  User(this.name, this.email);

  User.fromJson(Map<dynamic, dynamic> json)
      : name = json['name'],
        email = json['email'];

  Map<String, dynamic> toJson() => {
        'name': name,
        'email': email,
      };
}

void main() {
  runApp(const MyApp());
  var userInstance = User('홍길동', 'gildong@example.com');
  print('userInstance User() - instance of User');
  print(userInstance.name); // 홍길동
  print(userInstance.email); // gildong@example.com
  print(userInstance); // Instance of User
  print(userInstance.runtimeType); // User

  var userString = jsonEncode(userInstance);
  print('userString jsonEncode() - String');
  print(userString); // {"name":"홍길동","email":"gildong@example.com"}
  print(userString.runtimeType); // String

  Map userMap = jsonDecode(userString);
  print('userMap jsonDecode() - _InternalLinkedHashMap<String, dynamic>');
  print(userMap); // {name: 홍길동, email: gildong@example.com}
  print('안녕하세요, ${userMap['name']}님!');
  print('${userMap['email']}으로 인증 링크를 보냈습니다.');
  print(userMap.runtimeType); //  _InternalLinkedHashMap<String, dynamic>

  var userFromJson = User.fromJson(userMap);
  print('userFromJson fromJson - User');
  print(userFromJson); // Instance of User
  print(userFromJson.name); // 홍길동
  print(userFromJson.email); // gildong@example.com
  print(userFromJson.runtimeType); // User
}
profile
Software Engineer

0개의 댓글