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,
};
}
提前感谢您的帮助!
看起来问题出在。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);
最后,但并非最不重要的是,我强烈建议您看一看:
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