Flutter json解码返回null

时间:2020-03-24 13:13:15

标签: json flutter

运行以下代码时,我得到的返回值为空。显然我无法正确访问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"
    }
}

这里缺少什么?谢谢。

2 个答案:

答案 0 :(得分:1)

您正在尝试使用列表以外的内容。您提供的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"]);
}

答案 1 :(得分:1)

您的json结构不是真正的json。但是,如果您的json是这样的:

&

您可以获取如下数据:

            echo "you chose choice $REPLY which is $opt"
            firefox http://localhost:8000/browser/ &
            break