Decoding과 Encoding

Angela Jeong·2023년 12월 31일
post-thumbnail

JSON 읽는 법 배우기에서 JSON이라는 형식에 대해 살펴보았다. 서버는 바로 이 JSON이라는 형식을 인식할 수 있다.

따라서! 우리가 서버에 데이터를 가져올 때는 dart가 인식할 수 있는 형태로 변환을 해야하고, 반대로 서버로 데이터를 보내줄 때는 다시 JSON으로 바꿔줘야 한다. 전자를 디코딩, 후자를 인코딩이라고 부른다.

디코딩: 서버에서 데이터를 가져올 때 dart에서 사용할 수 있게 변환하는 것
인코딩: 서버로 데이터를 보낼 때 다시 JSON 형태로 변환하는 것.




Decoding

디코딩은 서버에서 받은 JSON 형태의 데이터를 Map 형태로 변환시키는 것이다. 디코딩을 하는 방법은 jsonDecode라는 함수를 이용하면 된다.

ex) jsonDecode 함수를 사용하여 JSON 문자열을 Map<String, dynamic>으로 디코딩한다.
※JSON의 타입은 String이다.

import 'dart:convert';

void main() {
  String jsonString = '{"name": "John", "age": 30}'; //JSON
  Map<String, dynamic> decodedData = jsonDecode(jsonString); //Map 형태로 디코딩

  print(jsonString); // 출력: {"name": "John", "age": 30} 
  print(decodedData); // 출력: {name: John, age: 30} 
}
  • jsonString은 JSON으로 내부의 모든 요소가 문자열로 인식된다. (숫자는 “”로 감싸지 않는다)
  • decodedData는 Map으로 string, dynamic 형태이다.



Encoding

Dart의 데이터를 서버로 전송하기 위해 jsonEncode 함수를 사용하여 JSON 형태로 변환환다.

import 'dart:convert';

void main() {
  Map<String, dynamic> data = {'name': 'Jane', 'age': 25}; //Map
  String jsonString = jsonEncode(data); // JSON으로 변환

  print(data); // 출력: {name: Jane, age: 25}
  print(jsonString); // 출력: {"name":"Jane","age":25}
}
  • data는 Map으로 string, dynamic 형태이다.
  • jsonString은 JSON으로 내부의 모든 요소가 문자열로 인식된다. (숫자는 “”로 감싸지 않는다)

class User {
  final String name;
  final String email;

  const User({
    required this.name,
    required this.email,
  });

  //직렬화
  Map<String, dynamic> toJson() => { // toJsaon은 Map<String, dynamic> 을 보낸다는 뜻
    'name' : name,
    'email' : email,
  };

 //역직렬화 
  User.fromJason(Map<String, dynamic> json)//fromJsaon은 Map<String, dynamic> 을 받는다는 뜻
  : name = json['name'],
    email = json['email'];
}

⇒ 즉, 디코딩과 인코딩은 서버와 클라이언트 간에 데이터를 일치시키는 작업이다.

0개의 댓글