cam*_*024 6 json types dart flutter
我正在尝试从 Dart/Flutter 应用程序中的 Rest API 解析数据。JSON 包含一个data
在根处调用的字段,其中包含一个Word
s列表。我想List<Word>
从这个 JSON 中得到一个。我已经有以下代码:
Map<String, dynamic> jsonMap = json.decode(jsonString);
List<Word> temp = jsonMap['data']
.map((map) => map as Map<String, dynamic>)
.map((Map<String, dynamic> map) => Word.fromJson(map)).toList(); // map to List<Word>
Run Code Online (Sandbox Code Playgroud)
Word.fromJson
具有以下签名:
Word.fromJson(Map<String, dynamic> json)
Run Code Online (Sandbox Code Playgroud)
最后调用map
给出了以下错误:
type 'List<dynamic>' is not a subtype of type 'List<Map<String, dynamic>>'
Run Code Online (Sandbox Code Playgroud)
根据我的理解,调用 tomap((map) => map as Map<String, dynamic>)
应该将 the 转换List<dynamic>
为 a List<Map<String, dynamic>>
,所以我对为什么会收到错误感到困惑。
任何建议表示赞赏。
Ali*_*i80 15
如果你想将 a 转换List<dynamic>
为List<Map<String, dynamic>>
正如标题所示,你应该强制转换 2 次:
(jsonDecode(response.body)["data"] as List).map((e) => e as Map<String, dynamic>)?.toList();
Run Code Online (Sandbox Code Playgroud)
Ren*_*cci 10
如果data
是单词列表,则可以“转换”为通用列表并迭代每个项目以转换为新Word
对象,
List<Word> temp = (jsonMap['data'] as List).map((itemWord) => Word.fromJson(itemWord)).toList();
Run Code Online (Sandbox Code Playgroud)
key是String,data是Dynamic,如果jsonMap['data']
是jsonString上的List,就不是a Map<String,dynamic>
,不能直接转换成map。
jsonString 示例和转换:
final jsonString = '''
{
"field": "titulo",
"data": [{"teste":1},{"teste":2},{"teste":3},{"teste":4}]
}
''';
final jsonMap = json.decode(jsonString);
List<Word> temp = (jsonMap['data'] as List)
.map((itemWord) => Word.fromJson(itemWord))
.toList();
Run Code Online (Sandbox Code Playgroud)
词类
class Word {
int teste;
Word({this.teste});
Word.fromJson(Map<String, dynamic> json) {
teste = json['teste'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['teste'] = this.teste;
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
使用JSON 生成Dart 类https://javiercbk.github.io/json_to_dart/
如果您使用强模式,我必须显式定义字段类型 ? 也没有必要。
注意“动态 e”
(jsonDecode(response.body)["data"] as List).map((dynamic e) => e as Map<String, dynamic>).toList();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13690 次 |
最近记录: |