Làm việc với JSON trong Dart
1. Giới thiệu
Dart sử dụng thư viện dart:convert để encode/decode JSON.
2. Import thư viện
import 'dart:convert';3. Decode JSON string
import 'dart:convert';
void main() {
String jsonString = '{"name": "Alice", "age": 25}';
Map<String, dynamic> data = jsonDecode(jsonString);
print(data['name']); // Alice
print(data['age']); // 25
}4. Encode to JSON string
import 'dart:convert';
void main() {
Map<String, dynamic> data = {
'name': 'Bob',
'age': 30,
'hobbies': ['reading', 'gaming'],
};
String jsonString = jsonEncode(data);
print(jsonString);
// {"name":"Bob","age":30,"hobbies":["reading","gaming"]}
}5. JSON với Class
import 'dart:convert';
class User {
String name;
int age;
String email;
User(this.name, this.age, this.email);
// fromJson factory
factory User.fromJson(Map<String, dynamic> json) {
return User(
json['name'],
json['age'],
json['email'],
);
}
// toJson method
Map<String, dynamic> toJson() {
return {
'name': name,
'age': age,
'email': email,
};
}
}
void main() {
// Parse JSON to object
String jsonString = '{"name":"Alice","age":25,"email":"alice@email.com"}';
var user = User.fromJson(jsonDecode(jsonString));
// Object to JSON
print(jsonEncode(user.toJson()));
}6. JSON Array
import 'dart:convert';
void main() {
String jsonArray = '[{"name":"Alice"},{"name":"Bob"}]';
List<dynamic> list = jsonDecode(jsonArray);
for (var item in list) {
print(item['name']);
}
}7. Nested JSON
import 'dart:convert';
class Address {
String city;
String country;
Address(this.city, this.country);
factory Address.fromJson(Map<String, dynamic> json) {
return Address(json['city'], json['country']);
}
Map<String, dynamic> toJson() => {'city': city, 'country': country};
}
class Person {
String name;
Address address;
Person(this.name, this.address);
factory Person.fromJson(Map<String, dynamic> json) {
return Person(
json['name'],
Address.fromJson(json['address']),
);
}
Map<String, dynamic> toJson() => {
'name': name,
'address': address.toJson(),
};
}8. Pretty print JSON
import 'dart:convert';
void main() {
var data = {'name': 'Alice', 'hobbies': ['a', 'b']};
var encoder = JsonEncoder.withIndent(' ');
print(encoder.convert(data));
/*
{
"name": "Alice",
"hobbies": [
"a",
"b"
]
}
*/
}9. Safe JSON parsing
import 'dart:convert';
T? tryParseJson<T>(String json, T Function(dynamic) parser) {
try {
return parser(jsonDecode(json));
} catch (e) {
print('JSON parse error: $e');
return null;
}
}
void main() {
String json = '{"name": "Alice"}';
var user = tryParseJson(json, (data) => User.fromJson(data));
}10. Đọc JSON từ file
import 'dart:io';
import 'dart:convert';
Future<void> main() async {
var file = File('data.json');
String content = await file.readAsString();
var data = jsonDecode(content);
print(data);
}📝 Tóm tắt
jsonDecode()parse JSON string → Dart objectjsonEncode()Dart object → JSON stringfromJson()factory cho parsingtoJson()method cho serializationJsonEncoder.withIndent()cho pretty print
Last updated on