데이터 통신 기초와 Json

김동준·2026년 1월 5일

직렬화 : 객체를 JSON 형태의 문자열로 변환할 때

객체 -> Map -> String
jsonEncode
객체에 toJson 메서드 구현

역직렬화 : JSON형태의 문자열를 객체로 변환할 때

String -> Map -> 객체
String -> Map : jsonDecode 함수
Map -> 객체 : 객체에 fromJson named 생성자를 구현해서 사용!

import 'dart:convert';
void main() {
  // jsonEncode: Map => String
  //
  Map<String, dynamic> map = {"name": "홍길동", "age": 20};
  String jsonData = jsonEncode(map);
  print(jsonData);
  // triplequotes: 긴 텍스트나 특정형식 유지 """ """
  String jsonSampleData = """
{
  "name":"홍길동",
  "age":20
}
""";
  var decodedData = jsonDecode(jsonSampleData);
  print(decodedData.runtimeType);
  print(decodedData);
  Human human = Human.fromJson(decodedData);
  human.toJson();
}
class Human {
  String name;
  int age;
  Human({required this.name, required this.age});
  Human.fromJson(Map<String, dynamic> map)
    : this(name: map['name'], age: map['age']);
  Map<String, dynamic> toJson() {
    return {'name': name, 'age': age};
  }
}

fromJson 네임드생성자 만들기

(Map<String, dynamic> map)

  • 생성자가 실행될 때 외부에서 전달받을 데이터의 타입을 정의합니다. 서버 데이터는 보통 키(String)와 값(dynamic)이 섞인 Map 형태이므로 이 타입을 가장 많이 씁니다.

this(...) => 초기화 리스트와 리다이렉트

  • 콜론(:) 뒤에 오는 코드를 초기화 리스트라고 부릅니다.

  • "나(네임드 생성자)한테 직접 만들라고 하지 말고, 이미 만들어둔 기본 생성자에게 일을 시켜라"라는 뜻입니다. (이를 리다이렉팅 생성자라고 합니다.)

name: map['name']

  • 전달받은 맵 주머니에서 'name'이라는 키에 해당하는 값을 꺼내서 기본 생성자의 name 자리에 넘겨줍니다.

toJson 메서드 만들기


프로그래밍에서 값을 대입할 때는 항상 "받는 쪽 = 주는 쪽" 순서로 사용합니다.

0개의 댓글