Flutter / Dart — Парсинг JSON на модель

Мне было интересно, может ли кто-нибудь помочь, пожалуйста? Я новичок в Flutter / Dart и пытаюсь разобрать вложенный ответ JSON в модель. Я использовал генератор JSON to Dart, который, похоже, работал хорошо, за исключением случаев, когда он анализирует ответы.

Я подозреваю, что проблема в том, что ответы различаются по результатам — иногда это может быть ноль, один массив или несколько.

Запуск .runtimeType показал мне, что он может возвращать null, если он пуст, List<dynamic>, если существует только один массив, и _InternalLinkedHashMap<String, dynamic>, если их несколько.

Я пробовал много разных подходов, чтобы попытаться решить эту проблему, и просмотрел много разных ответов StackOverflow, но, похоже, ничего не работает. Ошибка просто меняется с каждым моим изменением.

Ниже мой код и моя ошибка.

Ошибка: _TypeError (type ‘(dynamic) => Null’ is not a subtype of type ‘(String, dynamic) => void’ of ‘f’)

Код:

class VideoComments { int id; String comment; int uid; int likes; bool isLikedByUser; String posterProfilePic; String posterUsername; List<Responses> responses; VideoComments( {this.id, this.comment, this.uid, this.likes, this.isLikedByUser, this.posterProfilePic, this.posterUsername, this.responses}); VideoComments.fromJson(Map<String, dynamic> json) { print(«RESP: ${json[‘responses’].runtimeType}»); id = json[‘id’]; comment = json[‘comment’]; uid = json[‘uid’]; likes = json[‘likes’]; isLikedByUser = json[‘isLikedByUser’]; posterProfilePic = json[‘poster_profile_pic’]; posterUsername = json[‘poster_username’]; if (json[‘responses’] != null) { List<Responses> responses = []; json[‘responses’].forEach((v) { responses.add(new Responses.fromJson(v)); }); } } Map<String, dynamic> toJson() { final Map<String, dynamic> data = new Map<String, dynamic>(); data[‘id’] = this.id; data[‘comment’] = this.comment; data[‘uid’] = this.uid; data[‘likes’] = this.likes; data[‘isLikedByUser’] = this.isLikedByUser; data[‘poster_profile_pic’] = this.posterProfilePic; data[‘poster_username’] = this.posterUsername; if (this.responses != null) { data[‘responses’] = this.responses.map((v) => v.toJson()).toList(); } return data; } } class Responses { int id; String comment; int uid; int likes; bool isLikedByUser; Responses({this.id, this.comment, this.uid, this.likes, this.isLikedByUser}); Responses.fromJson(Map<String, dynamic> json) { id = json[‘id’]; comment = json[‘comment’]; uid = json[‘uid’]; likes = json[‘likes’]; isLikedByUser = json[‘isLikedByUser’]; } Map<String, dynamic> toJson() { final Map<String, dynamic> data = new Map<String, dynamic>(); data[‘id’] = this.id; data[‘comment’] = this.comment; data[‘uid’] = this.uid; data[‘likes’] = this.likes; data[‘isLikedByUser’] = this.isLikedByUser; return data; } }

Любая помощь приветствуется!

Не уверен, пробовали ли вы это — у меня это сработало: flutter. dev / docs / development / data-and-backend / Проблема в том, что вам все равно нужно создать класс самостоятельно, но, по крайней мере, отображение json выполняется правильно (и с нулевой безопасностью).   —  person James P    schedule 23.06.2021

Спасибо, Андрия. Я видел это, я не уверен, что нахожусь на уровне владения Dart / Flutter, чтобы использовать это. Кажется, намного выше моего уровня мастерства   —  person James P    schedule 23.06.2021

когда вы используете онлайн-инструменты для преобразования JSON в Dart, например — dripcoding.com/json-to- dart, затем всегда проверяйте тип данных каждой переменной. Вы получаете сообщение об ошибке, потому что одна из переменных определена как STRING, но фактическое значение — NON String value. Вы можете сделать одно — изменить тип данных всех переменных на динамический. это решит проблему.   —  person James P    schedule 06.07.2021

Источник: ledsshop.ru

Стиль жизни - Здоровье!