JSON(JavaScript Object Notation) 이란
키(key)-속성(value) 값으로 이루어진 데이터 형식(format)으로, 대량의 데이터를 저장하거나 전송할 때 json 형태로 값을 묶어서 전송한다.
key 의 타입은 String 만 가능하며
value 의 타입은
- String
- Number(int, double)
- Boolean
- Array
- Object
- null
JSON 예시
{
"name": "멍멍이",
"age": 2,
"isMale" : true,
"favorite_foods" : ["고기", "사료", "고구마"],
"contact": {
"mobile": "010-0000-0000",
"email": null
}
}
Dart 에서 JSON 데이터 변환하는 방법
클래스 구성
// Pet 클래스 구성
class Pet {
// 필드
String name;
int age;
bool isMale;
List<String> favoriteFoods;
Contact contact;
// 생성자
Pet({
required this.name,
required this.age,
required this.isMale,
required this.favoriteFoods,
required this.contact,
});
}
// Contact 클래스 구성
class Contact {
// 필드
String mobile;
String? email;
// 생성자
Contact({
required this.mobile,
required this.email,
});
}
직렬화:
Dart 객체를 JSON 형태의 문자열로 변환하는 것
방법
1. Dart 객체를 map 형태로 변환하는 메서드 생성
void main() {
Contact contact = Contact(mobile: "010-0000-0000", email: null);
// 객체 생성
Pet pet = Pet(
name: '멍멍이',
age: 2,
isMale: true,
favoriteFoods: ["고기", "사료", "고구마"],
contact: contact);
}
// 객체 클래스 구성
class Pet {
...
// 1. Map 데이터 형식으로 변환하는 메서드 생성
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
'isMale': isMale,
'favoriteFoods': favoriteFoods,
'contact': contact.toJson(),
};
}
}
class Contact {
...
// 1. Map 데이터 형식으로 변환하는 메서드 생성
Contact.fromJson(Map<String, dynamic> map)
: this(
mobile: map['mobile'],
email: map['email'],
);
}
2. 객체를 Map 형식으로 변환
// 2. 객체 -> map 으로 변환
final petToMap = pet.toJson();
3. Map 으로 변환된 값을 jsonEncode 를 통해 json 형태로 변환
// 3. map -> json
jsonEncode(petToMap);
역직렬화:
JSON 형태의 문자열을 Dart 객체로 변환하는 것
방법
1. json 형태의 데이터를 jsonDecode 를 통해 Map 형태의 데이터로 변환
void main() {
final jsonData = """
{
"name": "멍멍이",
"age": 2,
"isMale" : true,
"favorite_foods" : ["고기", "사료", "고구마"],
"contact": {
"mobile": "010-0000-0000",
"email": null
}
}
"""
// 1. json 데이터를 map 으로 변환
Map<String, dynamic> jsonMap = jsonDecode(jsonData);
}
2. Map 데이터를 Dart 객체로 변환하는 네임드 생성자 생성
class Pet {
...
// 2. Map 데이터를 Dart 객체로 변환하는 네임드 생성자 생성
Pet.fromJson(Map<String, dynamic> map)
: this(
name: map['name'],
age: map['age'],
isMale: map['isMale'],
// jsonDecode 하면서 List<dynamic> 타입으로 바뀌기 때문에 <String> 으로 지정해야함
favoriteFoods: List<String>.from(map['favorite_foods']),
contact: Contact.fromJson(map['contact']),
);
}
class Contact {
...
// 2. Map 데이터를 Dart 객체로 변환하는 네임드 생성자 생성
Contact.fromJson(Map<String, dynamic> map)
: this(
mobile: map['mobile'],
email: map['email'],
);
}
3. Map -> 객체로 변환
// 3. map -> 객체로 변환
jsonDecode(jsonMap);
요약 정리
직렬화(객체 -> Map -> JSON)
객체 클래스에서 map 으로 변환하는 메서드(toJson) 생성해서 jsonEncode 로 json 변환
역직렬화(JSON -> Map -> 객체)
json 을 jsonDecode 해서 map 형태로 변환하고 해당 데이터 타입을 객체로 변환하는 네임드 생성자(fromJson)로 객체 변환
'언어 > Dart' 카테고리의 다른 글
[Dart] 자주 사용되는 Collection 타입 데이터 처리 메서드 (0) | 2024.10.29 |
---|---|
Dart 시작하기! (0) | 2024.10.08 |
댓글