简体   繁体   English

Flutter - 如何解析 JSON 数据?

[英]Flutter - How to parse JSON data?

在此处输入图片说明

I want to parse my JSON data and display all the nodeValues of the rows and not just [7] (which contains the word hello), however my FutureBuilder doesn't display the JSON data (stuck on CircularProgressIndicator ) even though i'm following the correct JSON path.我想解析我的 JSON 数据并显示行的所有 nodeValues 而不仅仅是 [7](包含单词 hello),但是我的 FutureBuilder 不显示 JSON 数据(卡在CircularProgressIndicator )即使我正在关注正确的 JSON 路径。

//Updated code
class Feed {
  String title;

  Feed({this.title});

  factory Feed.fromJson(Map<String, dynamic> json) {
    return Feed(
        title: json["data"]["tables"][0]["rows"][7]["cols"][1]["nodeValue"]);  
  }
}
//I am making a post method to an API that returns me a JSON output.
Future<List<Feed>> post() async {
  final Response<String> result =
      await Dio().get('https://example.com');
  String _baseUrl = "https://html2json.com/api/v1";
  var options = Options(
    contentType: "application/x-www-form-urlencoded; charset=UTF-8",
    followRedirects: false,
  );

  final response = json.decode(result.data);

  final responseJson = await Dio().post(
    _baseUrl,
    data: response,
    options: options,
  );

  if (responseJson.statusCode == 200) {
    return (response as List).map((json) => Feed.fromJson(json)).toList();
  } else {
    return null;
  }
}
  //This is stuck on CircularProgressIndicator();  
FutureBuilder(
              future: post(),
              builder: (context, AsyncSnapshot<List<Feed>> snap) {
                if (snap.hasData) {
                  return ListView.builder(
                      itemCount: snap.data.length,
                      itemBuilder: (BuildContext context, int index) {
                        return Text(snap.data[index].title);
                      });
                } else {
                  return CircularProgressIndicator();
                }
              });

I changed a few things to make your code work with the json place holder.我更改了一些内容以使您的代码与 json 占位符一起使用。 You were using response.statusCode == 200, but response has no status code, the status code is on the var link.您使用的是 response.statusCode == 200,但响应没有状态代码,状态代码位于 var 链接上。

class Feed {
  String title;

  Feed({this.title});

  factory Feed.fromJson(Map<String, dynamic> json) {
    return Feed(title: json["title"]);
  }
}

Future<List> post() async {
  final Response<String> result = await Dio().get('https://jsonplaceholder.typicode.com/todos');
  final response = json.decode(result.data);
  if (result.statusCode == 200) {
    return (response as List)
        .map((json) => Feed.fromJson(json))
        .toList();
  } else {
    return null;
  }
}

return FutureBuilder(
       future: post(),
       builder: (context, AsyncSnapshot<List> snap) {
              if (snap.hasData) {
                      return ListView.builder(
                          itemCount: snap.data.length,
                          itemBuilder: (BuildContext context, int index) {
                            return Text(snap.data[index].title);
                          });
                    } else {
                      return CircularProgressIndicator();
                    }
                  });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM