Как я могу разобрать Список внутри Списка во Флаттере? - PullRequest
1 голос
/ 14 февраля 2020

У меня проблема с парсином в этом json, потому что я могу разобрать "indice", но я могу разобрать "capitulos". Я получаю ошибку: исключение произошло. _TypeError (тип 'String' не является подтипом типа 'Map') Как я могу проанализировать список внутри списка, пожалуйста? Я прочитал замечательную статью Пуджи Бхаумик, но id не скрывает этот пример.

[
    {
        "id": "1",
        "title": "title",
        "origem": "origin",
        "tipo": "type",
        "indice": [
            {
                "id": 1,
                "title": "title 1"
            },
            {
                "id": 2,
                "title": "title 2"
            },
        ],
        "capitulos": [
            [
                "chapter 1 text 1",
                "chapter 1 text 2",
                "chapter 1 text 3"
            ],
            [
                "chapter 2 text 1",
                "chapter 2 text 2",
                "chapter 2 text 3"
            ],
        ]        
    }
]

Моя модель:

class DocumentosList {
  final List<Documento> documentos;

  DocumentosList({
    this.documentos,
  });

  factory DocumentosList.fromJson(List<dynamic> parsedJson) {
    List<Documento> documentos = new List<Documento>();
    documentos = parsedJson.map((i) => Documento.fromJson(i)).toList();

    return new DocumentosList(documentos: documentos);
  }
}

class Documento {
  String id;
  String title;
  String origem;
  String tipo;
  List<IndiceItem> indice;
  List<Capitulos> capitulos;

  Documento({
    this.id,
    this.title,
    this.origem,
    this.tipo,
    this.indice,
    this.capitulos,
  });

  factory Documento.fromJson(Map<String, dynamic> parsedJson) {
    var list = parsedJson['indice'] as List;
    List<IndiceItem> indice = list.map((i) => IndiceItem.fromJson(i)).toList();

    var listCapitulos = parsedJson['capitulos'];
    List<Capitulos> capitulos =
        listCapitulos.map((i) => Capitulos.fromJson(i)).toList();

    return new Documento(
      id: parsedJson['id'],
      title: parsedJson['title'],
      origem: parsedJson['origem'],
      indice: indice,
      capitulos: capitulos,
    );
  }
}

class IndiceItem {
  String id;
  String title;

  IndiceItem({
    this.id,
    this.title,
  });

  factory IndiceItem.fromJson(Map<String, dynamic> parsedJson) {
    return IndiceItem(
      id: parsedJson['id'].toString(),
      title: parsedJson['title'],
    );
  }
}

class Capitulos {
  final List<Capitulo> capitulos;

  Capitulos({this.capitulos});

  factory Capitulos.fromJson(List<dynamic> parsedJson) {
    List<Capitulo> capitulos = new List<Capitulo>();
    capitulos = parsedJson.map((i) => Capitulo.fromJson(i)).toList();

    return new Capitulos(capitulos: capitulos);
  }
}

class Capitulo {
  final List<String> paragrafos;

  Capitulo({this.paragrafos});

  factory Capitulo.fromJson(Map<String, dynamic> parsedJson) {
    var paragrafosFromJson = parsedJson['paragrafos'];
    List<String> paragrafosList = paragrafosFromJson.cast<String>();

    return new Capitulo(
      paragrafos: paragrafosList,
    );
  }
}

1 Ответ

1 голос
/ 15 февраля 2020

Здесь нет ничего особенного, так как внутренний список имеет тип String, вы должны использовать

List<List<String>> capitulos

, и вы должны внести необходимые изменения от Json до Json.

...