首页 > 解决方案 > Flutter json解码返回null

问题描述

当我运行以下代码时,我得到一个空返回。显然我没有正确访问json。

还有另一种访问json数据的方法吗?或者可以这样使用它吗?

未来类 - 从 url 解析 json

  Future<List<User>> _getUsers() async {

    var data = await http.get("https://...api.php");


    if (data.statusCode == 200) {

        print('Status Code 200: Ok!');

        var jsonData = json.decode(data.body);


        List<User> users = [];

        for (var u in jsonData[0]) {


          print(u[0]["title"]);
          User user = User(u["id"], u["source"], u["desc"], u["link"], u["title"]);

          users.add(user);

        }

        print(users.length);

        return users;

    } else {

      throw Exception('Failed to load json');

    }


  }

班级

class User {

  final int id;
  final String source;
  final String desc;
  final String link;
  final String title;

  User(this.id, this.source, this.desc, this.link, this.title);


}

基本的json结构:

{
    "0":{
        "id":0,
        "source":"XXX",
        "link":"XXXX",
        "title":"XXXX",
        "desc":"XXXX"
    },
    "1":{
        "id":1,
        "source":"XXX",
        "link":"XXXX",
        "title":"XXXX",
        "desc":"XXXX"
    }
}

这里缺少什么?谢谢。

标签: jsonflutter

解决方案


您正在尝试使用不是列表的东西作为列表。您提供的 json 结构看起来像是对象的一部分,而不是列表。

列表如下所示:

[{
    "id": 0,
    "source": "XXX",
    "link": "XXXX",
    "title": "XXXX",
    "desc": "XXXX"
}]

但是由于底层结构是一个 Map 你可以迭代键,做这样的事情:

for (var k in jsonData.keys) {
    var u = jsonData[k];
    print(u["title"]);
    User user = User(u["id"], u["source"], u["desc"], u["link"], u["title"]);
}

推荐阅读