Bài thực hành Dart phân tích JSON với gói dart:convert
Trong bài học này chúng ta sẽ thực hành sử dụng gói thư viện dart:convert để phân tích một văn bản JSON thành các đối tượng Dart.
Tài liệu JSON dưới đây mô phỏng một biệt đội (Squad) và các thành viên. Chúng ta cần mô hình hoá nó dưới dạng các đối tượng Dart.
squad.json
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
1. SquadMemberData
Một văn bản JSON mang thông tin một thành viên của biệt đội (Squad).
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
}
Chúng ta mô hình hoá nó bằng lớp SquadMemberData. Phương thức tĩnh fromMap được sử dụng để chuyển đổi một đối tượng Map<String,dynamic> thành đối tượng SquadMemberData.
model_squad_member.dart
class SquadMemberData {
String name;
int age;
String secretIdentity;
List<String> powers = [];
SquadMemberData(this.name, this.age, this.secretIdentity, this.powers);
static SquadMemberData fromMap(Map<String, dynamic> map) {
String name = map['name'];
int age = map['age'];
String secretIdentity = map['secretIdentity'];
// List<dynamic> (***)
List<dynamic> list = map['powers'];
// Convert List<dynamic> to List<String>
List<String> powers = list.map((e) => e as String).toList();
return SquadMemberData(name, age, secretIdentity, powers);
}
}
2. SquadData
Một văn bản JSON mang thông tin một biệt đội (Squad).
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
........
]
}
Mô hình hoá nó bởi lớp SquadData:
model_squad.dart
import 'dart:convert';
import 'model_squad_member.dart';
class SquadData {
String squadName;
String homeTown;
int formed;
String secretBase;
bool active;
List<SquadMemberData> members = [];
SquadData({
required this.squadName,
required this.homeTown,
required this.formed,
required this.secretBase,
required this.active,
required this.members,
});
static SquadData fromMap(Map<String, dynamic> map) {
String squadName = map['squadName'];
String homeTown = map['homeTown'];
int formed = map['formed'];
String secretBase = map['secretBase'];
bool active = map['active'];
//
List<dynamic> list = map['members'];
List<SquadMemberData> squadMembers =
list.map((dynamic e) => SquadMemberData.fromMap(e)).toList();
return SquadData(
squadName: squadName,
homeTown: homeTown,
formed: formed,
secretBase: secretBase,
active: active,
members: squadMembers,
);
}
static SquadData fromJsonString(String jsonString) {
Map<String, dynamic> map = jsonDecode(jsonString);
return fromMap(map);
}
}
3. Example
squad_json_data.dart
String squadJson = '''
{
"squadName": "Super hero squad",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Super tower",
"active": true,
"members": [
{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": [
"Radiation resistance",
"Turning tiny",
"Radiation blast"
]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": [
"Million tonne punch",
"Damage resistance",
"Superhuman reflexes"
]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": [
"Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"
]
}
]
}
''';
Chuyển đổi một văn bản JSON thành đối tượng Dart:
main.dart
import 'model_squad.dart';
import 'model_squad_member.dart';
import 'squad_json_data.dart';
void main() {
var squad = SquadData.fromJsonString(squadJson);
print('Squad Name: ${squad.squadName}');
for (SquadMemberData member in squad.members) {
print("Member: ${member.name} / age: ${member.age}");
print(" POWERS:");
for (String power in member.powers) {
print(" - $power");
}
}
}
Output:
Squad Name: Super hero squad
Member: Molecule Man / age: 29
POWERS:
- Radiation resistance
- Turning tiny
- Radiation blast
Member: Madame Uppercut / age: 39
POWERS:
- Million tonne punch
- Damage resistance
- Superhuman reflexes
Member: Eternal Flame / age: 1000000
POWERS:
- Immortality
- Heat Immunity
- Inferno
- Teleportation
- Interdimensional travel
Các hướng dẫn lập trình Dart
- Kiểu dữ liệu Boolean trong Dart
- Hướng dẫn và ví dụ hàm trong Dart
- Hướng dẫn và ví dụ Dart Closures
- Interface trong Dart
- Hướng dẫn và ví dụ phương thức trong Dart
- Constructor trong Dart
- Property trong Dart
- Toán tử chấm chấm (..) trong Dart
- Hướng dẫn và ví dụ Dart Generics
- Lập trình Dart với công cụ trực tuyến DartPad
- Cài đặt Dart SDK trên Windows
- Cài đặt Visual Studio Code trên Windows
- Cài đặt Dart Code Extension cho Visual Studio Code
- Cài đặt Dart Plugin cho Android Studio
- Chạy ví dụ Dart đầu tiên của bạn trong Visual Studio Code
- Chạy ví dụ Dart đầu tiên của bạn trong Android Studio
- Dart JSON với thư viện dart:convert
- Hướng dẫn và ví dụ Dart List
- Biến (Variable) trong ngôn ngữ Dart
- Hướng dẫn và ví dụ Dart Map
- Vòng lặp trong Dart
- Xử lý Dart JSON với gói dart_json_mapper
- Trình chuyển đổi mã nguồn (Transpiler) là gì?
- Phân tích XML trong Dart
- Hướng dẫn và ví dụ Dart http
- Hướng dẫn và ví dụ Dart Future
- Các phương thức mở rộng (Extension) trong Dart
- Mixins trong Dart
- Bài thực hành Dart phân tích JSON với gói dart:convert
- Bài thực hành Dart http CRUD
- Từ khoá part và part of trong Dart
- Hướng dẫn và ví dụ Dart Dio
Show More