如何在 Flutter 中解析列表中的列表?

Posted

技术标签:

【中文标题】如何在 Flutter 中解析列表中的列表?【英文标题】:How can I parse a List inside a List in Flutter? 【发布时间】:2020-05-30 13:09:15 【问题描述】:

我在解析这个 json 时遇到问题,因为我可以解析“indice”,但我可以解析“capitulos”。我得到错误: 发生异常。 _TypeError(类型“String”不是“Map”类型的子类型) 请问如何解析列表中的列表? 我读过 Pooja Bhaumik 的一篇很棒的文章,但 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,
    );
  

【问题讨论】:

这一行出现错误? List&lt;String&gt; paragrafosList = paragrafosFromJson.cast&lt;String&gt;(); ? 【参考方案1】:

这里没什么特别的,因为内部列表是String类型,你应该使用

List<List<String>> capitulos

您还应该对 fromJson 和 toJson 进行必要的更改。

【讨论】:

以上是关于如何在 Flutter 中解析列表中的列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter dart 的列表中的循环内附加数据?

如何将 json 列表传递给 Flutter 中的 http 请求(post)正文?

在 Flutter 中使用 Dart,如何添加到地图列表中的地图列表中?

Flutter:如何知道列表视图中的项目位置?

如何使用 SharedPreferences 从 Flutter 中的列表中保存多个布尔值

如何使用 Dart / Flutter 中的列表从列表中删除重复元素?