Отправка JSON в Dart
Создание записи на API часто требует метода POST и
тела в формате JSON. Текст тела получают через
jsonEncode, а в запросе задают заголовок
"Content-Type: application/json".
Учебный "/posts" на typicode принимает
черновик с userId, title и
body. Ответ можно прочитать как строку
или разобрать в тип с полем id:
import 'package:http/http.dart' as http;
import 'dart:convert';
class SavedPost {
SavedPost(this.id, this.title);
final int id;
final String title;
factory SavedPost.fromJson(Map<String, Object?> json) {
return SavedPost(
json['id'] as int,
json['title'] as String,
);
}
}
void main() async {
var draft = {
'userId': 1,
'title': 'Note',
'body': 'Short text',
};
var response = await http.post(
Uri.parse(
'https://jsonplaceholder.typicode.com/posts',
),
headers: {'Content-Type': 'application/json'},
body: jsonEncode(draft),
);
var raw = jsonDecode(response.body);
if (raw is Map<String, Object?>) {
var saved = SavedPost.fromJson(raw);
print(saved.id);
print(saved.title);
}
}
Сервис httpbin.org/post возвращает принятое
тело внутри JSON-ответа. Массив чисел кодируют так
же, как одиночный объект, и отправляют одной строкой:
import 'package:http/http.dart' as http;
import 'dart:convert';
void main() async {
var payload = jsonEncode([1, 2, 3, 4, 5]);
var response = await http.post(
Uri.parse('https://httpbin.org/post'),
headers: {'Content-Type': 'application/json'},
body: payload,
);
print(response.body);
}
Сформируйте JSON-массив чисел от 1 до
5, отправьте его POST на
"https://httpbin.org/post" с типом
"application/json". Выведите тело
ответа целиком или фрагмент с принятыми
данными.