gpt4 book ai didi

json - 在 Flutter 中从 JSON 创建列表

转载 作者:IT王子 更新时间:2023-10-29 07:08:18 26 4
gpt4 key购买 nike

根据在线示例,我有以下代码:

_fetchData() async {
setState(() {
isLoading = true;
});

final response = await http.get(
"https://apiurl...");

if (response.statusCode == 200) {
print(json.decode(response.body).runtimeType); // _InternalLinkedHashMap<String, dynamic>

list = (json.decode(response.body) as List)
.map((data) => Model.fromJson(data))
.toList();

setState(() {
isLoading = false;
});
} else {
throw Exception('Failed to load');
}
}

返回此错误:

Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>' in type cast

这是 API 的响应:

{"results":[{"docid":"123434","title":"A title"}, ...]}

型号:

class Model {
final String title;
final String docid;

Model._({this.title, this.docid});

factory Model.fromJson(Map<String, dynamic> json) {
return new Model._(
title: json['title'],
docid: json['docid'],
);
}
}

我知道上面的工厂期望参数是 Map<String, dynamic>并且json的格式不同,可以更改,但想知道如何使其与这种格式一起使用。

*** 编辑

工作 ListView

body: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(10.0),
child: TextField(
onChanged: (value) {
...
},
controller: _searchController,
decoration: InputDecoration(

...
),
),
),
Expanded(
child: SizedBox(
height: 200.0,
child: ListView.builder(
itemCount: list.length,
itemBuilder: (BuildContext context, int index) {
return Text(list[index].title);
}),
),
)
],
),

最佳答案

print(json.decode(response.body).runtimeType) 打印 _InternalLinkedHashMap 的原因是因为您的 json 的顶层确实是一个映射; {"results":[ 用大括号打开。

因此,json.decode(response.body) 不是一个列表,不能转换为一个。另一方面,json.decode(response.body)['results'] 是一个列表。

你需要:

  list = json.decode(response.body)['results']
.map((data) => Model.fromJson(data))
.toList();

关于json - 在 Flutter 中从 JSON 创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56050165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com