Ответ
В Dart/Flutter есть два основных подхода: ручной парсинг с dart:convert и автоматический с помощью пакета json_serializable.
1. Ручной способ (dart:convert):
import 'dart:convert';
class User {
final String name;
final int age;
User({required this.name, required this.age});
factory User.fromJson(Map<String, dynamic> json) {
return User(
name: json['name'] as String,
age: json['age'] as int,
);
}
}
void main() {
String jsonString = '{"name": "John", "age": 30}';
Map<String, dynamic> jsonMap = jsonDecode(jsonString);
User user = User.fromJson(jsonMap);
print(user.name); // John
}
2. Автоматический способ (json_serializable): Этот способ предпочтительнее для сложных моделей, так как генерирует код парсинга, избегая опечаток.
- Добавьте зависимости в
pubspec.yaml:dependencies: json_annotation: ^4.8.1
dev_dependencies: build_runner: ^2.4.4 json_serializable: ^6.7.1
* Создайте модель с аннотацией:
```dart
import 'package:json_annotation/json_annotation.dart';
part 'user.g.dart';
@JsonSerializable()
class User {
final String name;
final int age;
User({required this.name, required this.age});
factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
Map<String, dynamic> toJson() => _$UserToJson(this);
}
- Сгенерируйте код парсера командой:
flutter pub run build_runner build
Почему json_serializable лучше? Он обеспечивает типобезопасность, автоматически генерирует методы toJson/fromJson и легко масштабируется при изменении структуры модели.