#http #dart #asynchronous #uri #future
Вопрос:
Когда я печатаю ['name']
имя по http-ссылке json, я получаю эту ошибку:
Unhandled exception:
type 'String' is not a subtype of type 'int' of 'index'
Код такой:
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() {
print(getData());
}
Future<http.Response?> getData() {
return http
.get(Uri.parse("https://jsonplaceholder.typicode.com/users"))
.then((http.Response response) {
var a = jsonDecode(response.body)['name'];
print(a);
});
}
Комментарии:
1. Возвращаемый JSON представляет собой список объектов. Нет никакого смысла запрашивать «имя» непосредственно в этом списке.
Ответ №1:
Ваш ответ JSON представлен в формате списка. Вам нужно будет выбрать один из объектов из этого списка, чтобы использовать ['name']
селектор.
import 'dart:convert';
import 'package:http/http.dart' as http;
void main() {
var response = getData();
for (var person in reponse) {
print(person['name']);
}
}
Future<http.Response?> getData() {
return http
.get(Uri.parse("https://jsonplaceholder.typicode.com/users"))
.then((http.Response response) {
var a = jsonDecode(response.body);
print(a);
// Select one of the items here. This case we're selecting the first one.
var name = a[0]['name'];
print(name);
return a;
});
}
Комментарии:
1. но как, если нам нужно напечатать все имена из каждого идентификатора
2. Я обновил код. Я его не тестировал, так что вам, возможно, придется его слегка подправить. В принципе, ответ возвращается в основную функцию. Там вы можете перебирать элементы ответа.
3. @MuhammadTawil это решение сработало для вас?
4. да , это работа , спасибо ,но я не знаю, как напечатать все имена из каждого идентификатора, но эта работа поможет решить эту ошибку