Список записей API в Dart
Коллекция на сервере часто приходит как JSON-массив
в корне ответа. В Dart после jsonDecode
проверяют List<Object?> и для каждого
элемента-карты вызывают fromJson.
Адрес "/users" без суффикса возвращает все
десять учебных пользователей. После чтения тела
удобно узнать длину списка и первое имя:
import 'package:http/http.dart' as http;
import 'dart:convert';
class ApiUser {
ApiUser(this.id, this.name);
final int id;
final String name;
factory ApiUser.fromJson(Map<String, Object?> json) {
return ApiUser(
json['id'] as int,
json['name'] as String,
);
}
}
void main() async {
var response = await http.get(
Uri.parse(
'https://jsonplaceholder.typicode.com/users',
),
);
var raw = jsonDecode(response.body);
if (raw is List<Object?>) {
print(raw.length);
if (raw.isNotEmpty &&
raw.first is Map<String, Object?>) {
var user = ApiUser.fromJson(
raw.first as Map<String, Object?>,
);
print(user.name);
}
}
}
Фильтр через параметры строки запроса меняет состав
массива. Для "/posts?userId=1" достаточно
модели поста с полями userId и
title:
import 'package:http/http.dart' as http;
import 'dart:convert';
class ApiPost {
ApiPost(this.userId, this.title);
final int userId;
final String title;
factory ApiPost.fromJson(Map<String, Object?> json) {
return ApiPost(
json['userId'] as int,
json['title'] as String,
);
}
}
void main() async {
var response = await http.get(
Uri.parse(
'https://jsonplaceholder.typicode.com/posts?userId=1',
),
);
var raw = jsonDecode(response.body);
if (raw is List<Object?>) {
print(raw.length);
}
}
Разберите локальную строку
["x","y","z"] в список строк и
выведите его размер.