Dart : Необработанное исключение: тип «Строка» не является подтипом типа «int» «индекса»

#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. да , это работа , спасибо ,но я не знаю, как напечатать все имена из каждого идентификатора, но эта работа поможет решить эту ошибку