当前位置: 首页 > 知识库问答 >
问题:

Flutter:从IEX JSON API检索股票、统计数据和报价列表

王凌
2023-03-14
  import 'package:http/http.dart' as http;
  import 'dart:convert';
  import '../models/stocks.dart';



   Future<Map<String,dynamic>> getStocks() async {

  // final String url = 
'https://cloud.iexapis.com/stable/stock/market/batch? 
  symbols=aapl,fb&types=quote&token=Hidden';
 //  final client = new http.Client();
  // final streamedRest = await client.send(
  //  http.Request('get', Uri.parse(url))


   const url = 'https://cloud.iexapis.com/stable/stock/market/batch?s 
  ymbols=aapl,fb&types=quote&token=Hidden';
   final response = await http.get(url);
  final decodedResponse = json.decode(response.body).keys();
   final data = Stocks.fromJson(decodedResponse);

    //http.Response response = await http.get(Uri, headers: {"Accept": 
   "application/json"});
   //print(jsonDecode(response.body).keys());
     return jsonDecode(response.body).keys();
    //  return streamedRest.stream
   //   .transform(utf8.decoder)
    // .transform(json.decoder)
    // .expand((data) => (data as List<dynamic>))
   //  .map((data) => Stocks.fromJSON(data));
   }

{“AAPL”:{“Stats”:{“Week52Change”:0.108189,“Week52High”:244.8,“Week52Low”:142,“MarketCap”:1100781864400,“Employees”:132000,“Day200MovingAVG”:196.46,“Day50MovingAVG”:220.62,“Float”:4512324403.94,“AVG10Volume”:23328121.8,“AVG30Volume”:26924247.43,“TTMEPS”:11.8267,“TTMDividendRate”:2.96,“CompanyName”:240.1683,“Year5ChangePercent”:1.315,“Year2ChangePercent”:0.5505,“Year1ChangePercent”:0.108189,“YtdChangePercent”:0.542427,“Month6ChangePercent”:0.186574,“Month3ChangePercent”:0.176601,“Month3ChangePercent”:0.102022,“Day30ChangePercent”:0.113509,“Day5ChangePercent”:0.030329,“NextDividendDate”:0.012152065029969619,08-09“,”peratio“:20.75,”beta“:1.534551916699308},”quote“:{”symbol“:”AAPL“,”companyname“:”Apple,Inc.“,”primaryexchange“:”Nasdaq“,”calculationprice“:”tops“,”open“:null,”opentime“:null,”close“:null,”close“:null,”closetime“:null,”high“:null,”low“:null,”latestprice““:245.395,”LatestSource“:”IEX实时价格“,”LatestTime“:”12:37:57

在为x86构建的Android SDK上以调试模式启动lib\main.dart...正在初始化分级。..正在解析依赖项。..正在运行分级任务“组装调试”...build build\app\outputs\apk\debug\app-debug.apk。I/OpenGrenderer(4854):初始化EGL,版本1.4D/OpenGrenderer(4854):交换行为1 D/(4854):主机连接::GET()新主机连接建立0xDC20BF00,tid 4881 D/EGL_Emulation(4854):EGLCreateContext:0xE3D47760:maj 2 min 0 rcv 2 D/EGL_Emulation(4854):EGLMakeCurrent:0xE3D47760:ver 2 0(tinfo 0xC6B24A30)D/(4854):主机连接::GET()新主机连接建立0xC6B386C0,tid 4874 D/EGL_Emulation(4854):EGLCreateContext:0xDC27D780:maj 2 min 0 rcv 2 D/EGL_Emulation(4854):EGLMakeCurrent:0xDC27D780:ver 2 0(Tinfo0xC6B24DC0)将文件同步到为x86...我/编舞(4854):跳过279帧!应用程序可能在其主线程上做了太多的工作。D/EGL_Emulation(4854):EGLMakeCurrent:0xE3D47760:ver 2 0(tinfo 0xC6B24A30)I/OpenGrenderer(4854):戴维!持续时间=6180ms;flags=1,intendedvsync=596431275408,vsync=601081275222,oldestinputevent=9223372036854775807,newestinputevent=0,handleinputstart=601083214976,animationstart=601083253387,performtraversalsstart=601083255696,drawstart=601033900000,syncstart=601335418694,issuedrawcommandsstart=601335535183,swapbuffers=602308827762,frameCome PLETED=602612881859,DeQueueBufferDuration=66828000,QueueBufferDuration=276000,D/EGL_Emulation(4854):EGLMakeCurrent:0xDC27D780:ver 2 0(tinfo 0xC6B24DC0)

import 'dart:convert';

Stocks stocksFromJson(String str) => Stocks.fromJson(json.decode(str));

String stocksToJson(Stocks data) => json.encode(data.toJson());

class Stocks {
  String symbol;
  String companyName;
  String primaryExchange;
  String calculationPrice;
  int open;
  int openTime;
  double close;
  int closeTime;
  double high;
  double low;
  double latestPrice;
  String latestSource;
  String latestTime;
  int latestUpdate;
  int latestVolume;
  dynamic iexRealtimePrice;
  dynamic iexRealtimeSize;
  dynamic iexLastUpdated;
  double delayedPrice;
  int delayedPriceTime;
  double extendedPrice;
  double extendedChange;
  double extendedChangePercent;
  int extendedPriceTime;
  double previousClose;
  int previousVolume;
  int change;
  double changePercent;
  int volume;
  dynamic iexMarketPercent;
  dynamic iexVolume;
  int avgTotalVolume;
  dynamic iexBidPrice;
  dynamic iexBidSize;
  dynamic iexAskPrice;
  dynamic iexAskSize;
  int marketCap;
  double peRatio;
  double week52High;
  int week52Low;
  double ytdChange;
  int lastTradeTime;
  bool isUsMarketOpen;

  Stocks({
    this.symbol,
    this.companyName,
    this.primaryExchange,
    this.calculationPrice,
    this.open,
    this.openTime,
    this.close,
    this.closeTime,
    this.high,
    this.low,
    this.latestPrice,
    this.latestSource,
    this.latestTime,
    this.latestUpdate,
    this.latestVolume,
    this.iexRealtimePrice,
    this.iexRealtimeSize,
    this.iexLastUpdated,
    this.delayedPrice,
    this.delayedPriceTime,
    this.extendedPrice,
    this.extendedChange,
    this.extendedChangePercent,
    this.extendedPriceTime,
    this.previousClose,
    this.previousVolume,
    this.change,
    this.changePercent,
    this.volume,
    this.iexMarketPercent,
    this.iexVolume,
    this.avgTotalVolume,
    this.iexBidPrice,
    this.iexBidSize,
    this.iexAskPrice,
    this.iexAskSize,
    this.marketCap,
    this.peRatio,
    this.week52High,
    this.week52Low,
    this.ytdChange,
    this.lastTradeTime,
    this.isUsMarketOpen,
  });

  factory Stocks.fromJson(Map<String, dynamic> json) => Stocks(
    symbol: json["symbol"],
    companyName: json["companyName"],
    primaryExchange: json["primaryExchange"],
    calculationPrice: json["calculationPrice"],
    open: html" target="_blank">json["open"],
    openTime: json["openTime"],
    close: json["close"].toDouble(),
    closeTime: json["closeTime"],
    high: json["high"].toDouble(),
    low: json["low"].toDouble(),
    latestPrice: json["latestPrice"].toDouble(),
    latestSource: json["latestSource"],
    latestTime: json["latestTime"],
    latestUpdate: json["latestUpdate"],
    latestVolume: json["latestVolume"],
    iexRealtimePrice: json["iexRealtimePrice"],
    iexRealtimeSize: json["iexRealtimeSize"],
    iexLastUpdated: json["iexLastUpdated"],
    delayedPrice: json["delayedPrice"].toDouble(),
    delayedPriceTime: json["delayedPriceTime"],
    extendedPrice: json["extendedPrice"].toDouble(),
    extendedChange: json["extendedChange"].toDouble(),
    extendedChangePercent: json["extendedChangePercent"].toDouble(),
    extendedPriceTime: json["extendedPriceTime"],
    previousClose: json["previousClose"].toDouble(),
    previousVolume: json["previousVolume"],
    change: json["change"],
    changePercent: json["changePercent"].toDouble(),
    volume: json["volume"],
    iexMarketPercent: json["iexMarketPercent"],
    iexVolume: json["iexVolume"],
    avgTotalVolume: json["avgTotalVolume"],
    iexBidPrice: json["iexBidPrice"],
    iexBidSize: json["iexBidSize"],
    iexAskPrice: json["iexAskPrice"],
    iexAskSize: json["iexAskSize"],
    marketCap: json["marketCap"],
    peRatio: json["peRatio"].toDouble(),
    week52High: json["week52High"].toDouble(),
    week52Low: json["week52Low"],
    ytdChange: json["ytdChange"].toDouble(),
    lastTradeTime: json["lastTradeTime"],
    isUsMarketOpen: json["isUSMarketOpen"],
  );

  Map<String, dynamic> toJson() => {
    "symbol": symbol,
    "companyName": companyName,
    "primaryExchange": primaryExchange,
    "calculationPrice": calculationPrice,
    "open": open,
    "openTime": openTime,
    "close": close,
    "closeTime": closeTime,
    "high": high,
    "low": low,
    "latestPrice": latestPrice,
    "latestSource": latestSource,
    "latestTime": latestTime,
    "latestUpdate": latestUpdate,
    "latestVolume": latestVolume,
    "iexRealtimePrice": iexRealtimePrice,
    "iexRealtimeSize": iexRealtimeSize,
    "iexLastUpdated": iexLastUpdated,
    "delayedPrice": delayedPrice,
    "delayedPriceTime": delayedPriceTime,
    "extendedPrice": extendedPrice,
    "extendedChange": extendedChange,
    "extendedChangePercent": extendedChangePercent,
    "extendedPriceTime": extendedPriceTime,
    "previousClose": previousClose,
    "previousVolume": previousVolume,
    "change": change,
    "changePercent": changePercent,
    "volume": volume,
    "iexMarketPercent": iexMarketPercent,
    "iexVolume": iexVolume,
    "avgTotalVolume": avgTotalVolume,
    "iexBidPrice": iexBidPrice,
    "iexBidSize": iexBidSize,
    "iexAskPrice": iexAskPrice,
    "iexAskSize": iexAskSize,
    "marketCap": marketCap,
    "peRatio": peRatio,
    "week52High": week52High,
    "week52Low": week52Low,
    "ytdChange": ytdChange,
    "lastTradeTime": lastTradeTime,
    "isUSMarketOpen": isUsMarketOpen,
  };
}

提前感谢您的帮助!

共有1个答案

古刚洁
2023-03-14

看起来问题出在。expand((data)=>(data as List)),看起来API返回的是JSON对象(Map),而不是JSON数组(List)

我还发现了另一个细节,“aapl”是JSON对象上的一个键,它的值是另一个JSON对象,如果您想将它的值映射到您的中,可以使用展开来获取“aapl”的值,并将其传递给您的工厂fromjson

其他重要的事情是确保您试图映射到的键存在于传递的JSON对象中。为了避免动态键(可能不会出现的键)的问题,可以使用空感知运算符

dart中的空感知运算符允许您根据值是否为空进行计算。它是较长表达的速记。

一个让事情变得简单一点的建议是,也许不要使用流,你可以只使用Future来为一些异步的东西重新工厂你的代码

const url = 'http://example.com/';
final response = await http.get(url);
final decodedResponse = json.decode(response);
final yourObject = Class.fromJSON(decodedResponse);

最后,但并非最不重要的是,我强烈建议您看一看:

    null
 类似资料:
  • A股 股票市场总貌 上海证券交易所 接口: stock_sse_summary 目标地址: http://www.sse.com.cn/market/stockdata/statistic/ 描述: 上海证券交易所-股票数据总貌 限量: 单次返回最近交易日的股票数据总貌数据(当前交易日的数据需要交易所收盘后统计) 输入参数 名称 类型 必选 描述 - - - - 输出参数-实时行情数据 名称 类型

  • 问题内容: 我正在寻找来自Google服务的财务数据。 我发现此URL获取Microsoft的库存数据。 Google允许这种HTTP请求的所有可能参数是什么?我想看看我可以获得的所有不同信息。 问题答案: 有一个用于管理投资组合的完整API。*链接已删除。Google不再为此提供开发人员API。 获取股票报价要困难一些。我发现一篇文章,有人使用Google Spreadsheets获得股票报价。

  • 问题内容: 我对使用 Python 编程很 陌生 。 我想制作一个将从Google Finance 获取股票价格* 的应用程序。一个示例是CSCO (思科系统) 。然后,我将使用该数据 在库存达到一定值时向用户发出警告 。它还需要 每30秒刷新一次 。 __ *** 问题是我不知道如何获取数据! 谁有想法? 问题答案: 该模块由CoreyGoldberg提供。 程序: 用法示例: 更新 :更改了正

  • 索引段数据的统计 在第3章 索引底层控制中 控制段合并 一节中,我们探讨了调整Apache Lucene索引段合并过程来满足业务需求的可能性。此外,在第6章 应对突发事件的当I/O过于繁忙——节流功能详解一节中,我们将讨论更多功能的参数配置。然而,为了了解需要调整哪些方面,至少先得看看索引或者索引分片中索引段的结构。 段操作相关的API介绍 为了更深入地了解Lucene的索引段,ElasticSe

  • 我们在学校使用hibernate,我们正在实施贷款。我们有一个持续的贷款类别,根据贷款信息(付款金额、到期总额等),应用程序应计算特定贷款的全部付款报价。 因此,我们有一个Quote类,其中包含有关该Quote的信息,Loan类有一个所有Quote的列表(类之间的组合)。 由于报价信息是可计算的,我认为它不应该出现在数据库中。 我的问题是,当Hibernate从DB获得贷款时,如何让它计算并填充报

  • 在这个 Matplotlib 教程中,我们将展示如何跟踪股票的最后价格的示例,通过将其注解到轴域的右侧,就像许多图表应用程序会做的那样。 虽然人们喜欢在他们的实时图表中看到历史价格,他们也想看到最新的价格。 大多数应用程序做的是,在价格的y轴高度处注释最后价格,然后突出显示它,并在价格变化时,在框中将其略微移动。 使用我们最近学习的注解教程,我们可以添加一个bbox。 我们的核心代码是: bbox