
JSON 읽는 법 배우기에서 JSON이라는 형식에 대해 살펴보았다. 서버는 바로 이 JSON이라는 형식을 인식할 수 있다.
따라서! 우리가 서버에 데이터를 가져올 때는 dart가 인식할 수 있는 형태로 변환을 해야하고, 반대로 서버로 데이터를 보내줄 때는 다시 JSON으로 바꿔줘야 한다. 전자를 디코딩, 후자를 인코딩이라고 부른다.
디코딩: 서버에서 데이터를 가져올 때 dart에서 사용할 수 있게 변환하는 것
인코딩: 서버로 데이터를 보낼 때 다시 JSON 형태로 변환하는 것.
디코딩은 서버에서 받은 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}
}
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}
}
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'];
}