这个过程有两个步骤。最好先将此 json 映射到数据结构。然后您可以显示对象。您可以在答案底部的浏览器中试用一个工作示例
映射到数据结构
假设您将有以下课程:
class TimeSlot {
final String date;
final String available;
TimeSlot(this.date, this.available);
}
您可以手动实现fromJson 方法,或使用json_serializable 包并简单地注释类。在本例中,我将手动完成。
TimeSlot.fromJson(Map<String, dynamic> json)
: date = json['date'],
available = json['available'];
现在您已完成此设置,您可以将 json 字符串映射到此结构。嵌套数组的结构使这变得相当复杂。
import 'dart:convert';
final json = jsonDecode(myJson);
final timeJson = (json['time'] as List<dynamic>).cast<List<dynamic>>();
final List<List<TimeSlot>> time = timeJson.map((timeGroup) {
return timeGroup.map((item) {
return TimeSlot.fromJson(item as Map<String, dynamic>);
}).toList();
}).toList();
显示数据
嵌套ListView 小部件可能会因为嵌套它们的滚动行为而导致问题。这是一个示例,您可以如何同时使用 ListView 和 Column。
return ListView.separated(
itemCount: time.length,
separatorBuilder: (_, index) => Divider(),
itemBuilder: (_, outerIndex) {
final group = time[outerIndex];
return Column(
children:
group.map((slot) => ListTile(
title: Text("date: ${slot.date}"),
subtitle: Text("available: ${slot.available}"),
)).toList(),
);
}
);
工作示例
我在 DartPad 上做了一个工作示例:https://dartpad.dev/?id=b8d6d72a1359c6b9f638480d667f5cf9&null_safety=true
其他资源
查看 Flutter 开发网站上的 JSON and serialization 部分。