Вопросы

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;
  }
}

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

Читать:
Разбор файла Json глубокого уровня и отображение данных во внешнем интерфейсе Angular

Не уверен, пробовали ли вы это — у меня это сработало: 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

Похожие записи

Сценарий ограничения бюджета плана firebase blaze?

admin

Ошибка в данных $ update_params (params = params): [LightGBM] [Fatal] Невозможно изменить max_bin после созданного дескриптора набора данных

admin

Выделите термин в строке

admin

Получение веб-страниц из переменной

admin

Запуск удаленного ядра через ноутбук jupyter

admin

Snakemake — ноутбук Jupyter lab не находит ядро

admin