Инструмент Tool Kumar
JSON в Dart
Генерируйте модели Dart для ответа API во Flutter. Для каждого вложенного класса создаются final-поля, const-конструктор, фабрика fromJson и метод toJson.
Как пользоваться инструментом
- Вставьте типичный ответ, включая записи с разным набором полей.
- Проверьте сгенерированный код и при необходимости измените имя корня.
- Скопируйте или скачайте код, затем сверьте типы с контрактом вашего API.
Пример с разбором
Этот результат создан встроенным конвертером. По двум ценам товаров выводится тип поля с плавающей точкой. Значения null и строка в поле note дают тип, допускающий null.
Ввод
{
"user-id": 42,
"profile": {
"city": "London",
"created_at": "2026-10-14T09:00:00Z"
},
"items": [
{
"price": 12,
"note": null
},
{
"price": 12.5,
"note": "gift"
}
]
}Результат
class Root {
final int userId;
final Profile profile;
final List<Item> items;
const Root({
required this.userId,
required this.profile,
required this.items,
});
factory Root.fromJson(Map<String, dynamic> json) => Root(
userId: json['user-id'] as int,
profile: Profile.fromJson(json['profile'] as Map<String, dynamic>),
items: (json['items'] as List<dynamic>).map((e) => Item.fromJson(e as Map<String, dynamic>)).toList(),
);
Map<String, dynamic> toJson() => {
'user-id': userId,
'profile': profile.toJson(),
'items': items.map((e) => e.toJson()).toList(),
};
}
class Profile {
final String city;
final String createdAt;
const Profile({
required this.city,
required this.createdAt,
});
factory Profile.fromJson(Map<String, dynamic> json) => Profile(
city: json['city'] as String,
createdAt: json['created_at'] as String,
);
Map<String, dynamic> toJson() => {
'city': city,
'created_at': createdAt,
};
}
class Item {
final double price;
final String? note;
const Item({
required this.price,
this.note,
});
factory Item.fromJson(Map<String, dynamic> json) => Item(
price: (json['price'] as num).toDouble(),
note: json['note'] as String?,
);
Map<String, dynamic> toJson() => {
'price': price,
'note': note,
};
}
Использование модели во Flutter
Импортируйте dart:convert и вставьте сгенерированные классы в файл модели. Передайте декодированный ответ (Map) в Root.fromJson. jsonEncode вызывает сгенерированный метод toJson.
Если в проекте уже используется json_serializable, адаптируйте поля под этот процесс, чтобы не поддерживать два набора сгенерированных методов JSON.
import 'dart:convert';
final model = Root.fromJson(jsonDecode(responseBody) as Map<String, dynamic>);
final text = jsonEncode(model.toJson());Параметры и особые случаи
- Ключи JSON вроде user-id превращаются в поля в camelCase. Сгенерированные методы JSON сохраняют исходные ключи.
- Целые и дробные цены объединяются в double. Декодер приводит значение через num и вызывает toDouble, поэтому подходят оба значения из примера.
- Null вместе со строкой даёт String?. Поле, которое встречается только как null, остаётся dynamic, потому что его предполагаемый тип неизвестен.
- Даты остаются String. Разбор DateTime настройте сами. Dart, скомпилированный для веба, не может точно представить все большие целые числа.
Конфиденциальность по умолчанию
Документ остаётся в этом браузере. Tool Kumar разбирает и конвертирует данные, создаёт файлы для скачивания на вашем устройстве, без регистрации и отправки на сервер.
Вопросы об инструменте «JSON в Dart»
- Генерирует ли он аннотации json_serializable?
- Нет. Методы fromJson и toJson пишутся напрямую. Нет ни аннотаций @JsonSerializable, ни part-файлов, ни шага build_runner.
- Как учитывается null safety?
- Значения null и поля, отсутствующие в части записей, делают выведенные поля nullable. Поля без null становятся обязательными (required) аргументами конструктора. Поля, содержащие только null, получают тип dynamic.
- Можно ли конвертировать массивы вложенных объектов?
- Да. Из примера получается List<Item>: каждый входной элемент проходит через Item.fromJson, а при кодировании для каждого элемента вызывается toJson.
- Нужен ли пакет Flutter?
- Сгенерированные модели используют базовые типы Dart. Декодируйте текст ответа с помощью dart:convert, затем вызовите Root.fromJson.
Похожие инструменты
JSON в Swift: модели Codable, JSON в Kotlin: data-классы и Генератор JSON Schema.