json - 我想用字符串数组在 Flutter 中解析复杂的 JSON,然后在另一个列表视图中显示
问题描述
所以我想取出用户名中的第一个字母,即用户内部的每个列表 view.builder 单元格!
我的问题是我找不到任何好的方法来序列化里面有一个对象列表的儿子,这已经成为一个真正的问题!
例如,我们将有一个包含所有类似项目的列表视图,然后在每个单元格中显示成员的名称。就像在这种情况下:名称将是:“test med teacher chat”,成员将是:“hugo”和“studentone”!
JSON:
[
{
"id": 81,
"users": [
{
"username": "hugo",
"fullname": "Hugo Johnsson"
},
{
"username": "studentone",
"fullname": "Student One"
}
],
"title": "test med teacher chat",
"description": "This project does not have a description.",
"subject": "No subject",
"deadline": "2019-01-06",
"days_left": "98 days ago",
"overview_requests": [
{
"id": 28,
"user": {
"username": "hugo",
"fullname": "Hugo Johnsson"
},
"group": 81
}
]
},
未来:
Future<List<Project>> _getProjects() async {
var data = await http.get(
"http://studieplaneraren.pythonanywhere.com/api/projects/${UserLog().Username}/?format=json");
var jsonData = json.decode(data.body); //an array of json objects
List<Project> allProjects = [];
for (var JData in jsonData) {
Project project = Project(
JData["id"],
JData["title"],
JData["description"],
JData["deadline"],
JData["subject"],
JData["days_left"],
JData["users"]);
allProjects.add(project);
}
return allProjects;
}
定义:
class Project {
final int id;
final String title;
final String description;
final String deadline;
final String subject;
final String days_left;
final List users;
Project(
this.id,
this.title,
this.description,
this.deadline,
this.subject,
this.days_left,
this.users
);
}
解决方案
我不太确定我是否理解您要查找的内容,但是如果您正在尝试找到一种解析该 json 的方法,以便您始终可以获取列表中每个用户名的第一个字母,您只需要了解结构的 json 和你得到的,并确保你像往常一样获得所需的字段。
我用DartPad给你做了一个小例子,并且还在你的 json 中添加了更多的用户名。
数据
const List<Map<String,dynamic>> map = [
{
"id": 81,
"users": [
{
"username": "hugo",
"fullname": "Hugo Johnsson"
},
{
"username": "studentone",
"fullname": "Student One"
},
{
"username": "anotherStudent",
"fullname": "Student Two"
},
{
"username": "oneMore",
"fullname": "Student Three"
},
{
"username": "isItEnough",
"fullname": "Student N"
}
],
"title": "test med teacher chat",
"description": "This project does not have a description.",
"subject": "No subject",
"deadline": "2019-01-06",
"days_left": "98 days ago",
"overview_requests": [
{
"id": 28,
"user": {
"username": "hugo",
"fullname": "Hugo Johnsson"
},
"group": 81
}
]
}
];
获取数据
void main() {
map.forEach((element) {
final List<Map<String,dynamic>> users = element['users'] as List;
users.forEach((user){
final String firstUsernameLetter = user['username'][0];
print('First letter of ${user['username']}: $firstUsernameLetter');
});
});
}
输出
First letter of hugo: h
First letter of studentone: s
First letter of anotherStudent: a
First letter of oneMore: o
First letter of isItEnough: i
推荐阅读
- javascript - 无法从 JSON 获取日期值
- material-ui - 打开参数不起作用(InlineDatePicker) - 材料 ui
- python - 如何在不使用任何函数的情况下检查一组字符串是否包含另一个字符串?
- javascript - 如何动态合并两个不同深度的对象
- javascript - 如果 mailto: 为空,则隐藏按钮
- amazon-web-services - 为什么我的 Cloudwatch SEARCH 表达式停止返回数据?
- javascript - 如何在 javascript es6 中创建私有静态属性?
- laravel - 如何将一些控制器和视图移动到子文件夹?
- javascript - 结果我的 AJAX 函数不断出错
- javascript - 嵌套的 iframe contentWindow 始终为空