进行Webservice调用后,我得到如下json数据:
{myteam: [
{'id': '1', name: 'xy'},
{'id': '2', name: 'zx'},
{'id': '3', name: 'gh'}
]}
我在Flutter上了一个类:
class CardData {
int id;
String name;
CardData({this.id, this.name});
}
我通过以下方式将数据解析为CardData列表:
List<CardData> CardsList = [];
List cards = List();
我得到了数据:
Map<String, dynamic> map = await ws.getData();
放入 list
cards = map['myteam'];
然后迭代卡片:
cards.forEach((f) {
CardsList.add(CardData(id: f['id'], name: f['name']));
}
我知道,这不是最好的方法,而是有效的方法。现在,请帮助我,我该如何为该任务制定适当的解决方案。
最佳答案
您可以使用如下逻辑来解析您的Json:
class _MyHomePageState extends State<MyHomePage> {
String jsonList = '{"myteam":[{"id":"1","name":"xy"},{"id": "2","name":"zx"},{"id":"3","name": "gh"}]}';
Future<List<CardData>> listOfItems() async {
var parse = json.decode(jsonList);
var data = parse['myteam'] as List;
var map = data.map<CardData>((json) => CardData.parseJson(json));
return map.toList();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Container(
child: Center(
child: FutureBuilder<List<CardData>>(
future: listOfItems(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Text(snapshot.data[0].name);
} else {
return Text("Loading...");
}
},
),
),
),
);
}
}
class CardData {
String id;
String name;
CardData({this.id, this.name});
factory CardData.parseJson(Map<String, dynamic> json) {
return CardData(id: json['id'], name: json['name']);
}
}
现在,您的Json正在使用String作为ID(您应该删除引号以使其成为Integer)。另外,您
myteam
Json数组键没有任何引号。关于flutter - 在Flutter中将Json解析为对象列表的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56654897/