Flutter中如何获取JSON映射的首个键值对指定字段值?
在Flutter中获取JSON映射的首个值
Hey,我来帮你搞定这个问题!你现在的代码会遍历所有日期的数据,但其实完全不用这么麻烦——我们可以直接定位到Time Series (Daily)里的第一个键值对,提取你需要的high和low值就行。
核心思路
在Dart(Flutter的开发语言)里,Map类型有几个实用属性能帮我们快速拿到首个元素:
entries:返回所有键值对的可迭代集合,直接取.first就能拿到第一个键值对keys:返回所有键的集合,取.first拿到第一个日期键,再通过键获取对应的数据
具体实现
下面给你两种可行的写法,选哪种都可以:
写法一:直接获取首个键值对
JSONObject json = await timeSeries.getDaily(stock); // 先把Daily数据转成明确的Map类型 var dailyData = json.getJSONMap()["Time Series (Daily)"] as Map<String, dynamic>; if (dailyData.isNotEmpty) { // 拿到第一个键值对 var firstDailyEntry = dailyData.entries.first; var firstDayDetails = firstDailyEntry.value; // 提取你需要的high和low double highValue = double.parse(firstDayDetails["2. high"]); double lowValue = double.parse(firstDayDetails["3. low"]); // 这里就可以用这两个值做后续处理啦 print("最新日期: ${firstDailyEntry.key}, 最高价: $highValue, 最低价: $lowValue"); } else { // 处理数据为空的情况 print("未获取到每日时间序列数据"); }
写法二:通过首个键获取对应数据
JSONObject json = await timeSeries.getDaily(stock); var dailyData = json.getJSONMap()["Time Series (Daily)"] as Map<String, dynamic>; if (dailyData.isNotEmpty) { // 拿到第一个日期键 String firstDate = dailyData.keys.first; var firstDayDetails = dailyData[firstDate]; double highValue = double.parse(firstDayDetails["2. high"]); double lowValue = double.parse(firstDayDetails["3. low"]); print("$firstDate 的最高价: $highValue, 最低价: $lowValue"); } else { print("没有可用的每日数据"); }
小提醒
一定要加dailyData.isNotEmpty的判断哦!如果接口返回的Time Series (Daily)是空的,直接调用.first会抛出异常,加个判断能让你的代码更健壮。另外,Dart里默认的Map(LinkedHashMap)会保留插入顺序,所以这里的"第一个"就是JSON里最靠前的那个日期数据~
内容的提问来源于stack exchange,提问作者Alvin Heng
相关产品推荐
相关产品推荐

