如何在 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<String> paragrafosList = paragrafosFromJson.cast<String>();
?
【参考方案1】:
这里没什么特别的,因为内部列表是String类型,你应该使用
List<List<String>> capitulos
您还应该对 fromJson 和 toJson 进行必要的更改。
【讨论】:
以上是关于如何在 Flutter 中解析列表中的列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter dart 的列表中的循环内附加数据?
如何将 json 列表传递给 Flutter 中的 http 请求(post)正文?
在 Flutter 中使用 Dart,如何添加到地图列表中的地图列表中?