arrays - 如何在 flutter 中解析json?

标签 arrays json parsing flutter dart

我想创建一个新闻应用程序,并使用 newsapi.org 作为来源。

我正在尝试获取来自 Http 库的 JSON 数据。

我在下面提供了完整的代码。

它没有给我任何错误,但没有加载数据,当我打印数据时,它打印的一切正常,但我无法显示它。

我不知道是什么问题,但我所有的项目都在这个问题上停止了。

我正在寻找此代码的解决方案,因为它不起作用。

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:newly/services/networking.dart';
import 'package:newly/widgets/article.dart';

class NewsScreen extends StatefulWidget {
  @override
  _NewsScreenState createState() => _NewsScreenState();
}

class _NewsScreenState extends State<NewsScreen> {

  List<Article> articles = [];

  NetworkHelper networkHelper = NetworkHelper(
    url:
        'https://newsapi.org/v2/everything?q=bitcoin&apiKey=392495172bab4b3885ae93760df54b91',
  );

  Future<List<Widget>> getNews() async {
    var newsData = await networkHelper.getData();

    for (int i = 0; i < await newsData['articles'].length; i++) {
      var title = await newsData['articles'][i]['title'];
      var urlToImage = await newsData['articles'][i]['urlToImage'];
      var content = await newsData['articles'][i]['content'];
      var author = await newsData['articles'][i]['author'];
      var url = await newsData['articles'][i]['url'];

      print(title);
      print(urlToImage);
      print(url);
      print(content);
      print(author);
      print('123456789123456789123456789123456789');

      articles.add(
        Article(
          author: author,
          content: content,
          title: title,
          url: url,
          urlToImage: urlToImage,
        ),
      );

      print(articles[0].author);

    }

    return articles;
  }

  Future<List<Article>> showArticles() async {
    var data = await get(
      'https://newsapi.org/v2/everything?q=bitcoin&apiKey=392495172bab4b3885ae93760df54b91',
    );

    var dataDecoded = await json.decode(data.body);

    List<Article> articles = [];

    await dataDecoded.forEach(
      (article) {
        articles.add(
          Article(
            author: article['author'],
            content: article['content'],
            title: article['title'],
            url: article['url'],
            urlToImage: article['urlToImage'],
          ),
        );
      },
    );

    return articles;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.black,
        centerTitle: true,
        title: Text(
          'Newly',
          style: TextStyle(
            color: Colors.white,
          ),
        ),
      ),
      body: FutureBuilder(
        future: getNews(),
        builder: (context, snapshot) {
          return ListView(
            children: articles,
          );
        },
      ),

    );
  }
}

网络助手:

import 'package:http/http.dart' as http;
import 'dart:convert';

class NetworkHelper {
  NetworkHelper({this.url});

  final String url;

  Future getData() async {
    http.Response response = await http.get(url);

    if (response.statusCode == 200) {
      String data = response.body;

      return json.decode(data);
    } else {
      print('something wrong');
      print(response.statusCode);
    }
  }
}

最佳答案

一起工作时json 数据
好的做法是到 创建模型 为此,然后只是 通过api获取数据
创建模型和类很容易,而且不费力,使您的工作变得轻松;)
对于 为您的项目创建模型
访问 https://javiercbk.github.io/json_to_dart/
只是copy your json datapaste in the textField只需单击一下,您就可以准备好模型类
用于访问数据

Test _test = Test.fromJson(response.body);
就是这样。
引用下图
enter image description here

关于arrays - 如何在 flutter 中解析json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58706067/

相关文章:

json - Postgres - 将邻接表转换为嵌套的 JSON 对象

php - 如何检查前一个节点是否带有特定标签?

android - 解析 XML 的最佳实践

JavaScript - 按键减少对象数组

python - Numpy 将一个数组的所有非零元素组合到另一个数组中

mysql - 如何与 Git(或 à la Git)同时使用数据库

python - 将python中的整数解析为另一个软件的命令

ios - 使用 UITableView 和数组无限滚动

javascript - 从特定字符串开始对Javascript中的数组进行排序

javascript - 在 Angular 模板中处理可变 JSON 响应