Декодирование Json преобразуется в List вместо Map

#flutter

#flutter

Вопрос:

Я получаю этот ответ от API:

 [
    {
        "id": 1,
        "company_id": 2,
        "surname": "Surname",
        "name": "Name",
        "employee_position_id": 1,
        "phone_number": " xxx xxx xxx xxx",
        "email": "mail@mail.mail",
        "user_id": 1,
        "contact_level": null,
        "created_at": "2020-10-03T16:50:59.000000Z",
        "updated_at": "2020-10-03T17:05:54.000000Z",
        "deleted_at": null,
        "full_name": "Surname Name",
        "position_name": "IT",
        "company_name": "Company One"
    }
]
  

Согласно каждому руководству, которое я нашел, этот код должен работать:

 void _getContacts() async {
    var res = await Network().getData('/contacts');
    final Map<String, dynamic> body = json.decode(res.body);
    // print(body.runtimeType);
  }
  

Однако это выдает мне эту ошибку:

 E/flutter (23716): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
  

Когда я печатаю body.runtimeType , там написано List<dynamic>

Я дважды проверил, я все проверил, json, кажется, в правильном формате, весь код, кажется, написан правильно.

Как это возможно, что это дает мне List вместо a Map ? и как мне заставить json.decode предоставить мне карту вместо списка?

Ответ №1:

Есть список, который вы должны повторить. если в вашем списке есть только один объект, вы можете использовать его следующим образом

 void _getContacts() async {
    var res = await Network().getData('/contacts');
    var response= json.decode(res.body);
    final Map<String, dynamic> body = response[0];
    // print(body.runtimeType);
  }
  

если в вашем списке более одного объекта, вы можете использовать его следующим образом

 void _getContacts() async {
    var res = await Network().getData('/contacts');
    var response= json.decode(res.body);
    final Map<String, dynamic> body = response.map((e)=>e);
    // print(body.runtimeType);
  }
  

Комментарии:

1. спасибо, для меня это шаг вперед, однако следующая ошибка появилась сразу после E/flutter (23716): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: type 'MappedListIterable<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>' того, что сейчас?

2. лучше сделать из него класс модели, используя javiercbk.github.io/json_to_dart ссылка и есть fromJson метод, который преобразует JSON в ваш класс модели

3. Не сэр, Абхи @narrei