首页 > 解决方案 > 我想用字符串数组在 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
  );
}

标签: jsonflutter

解决方案


我不太确定我是否理解您要查找的内容,但是如果您正在尝试找到一种解析该 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

推荐阅读