You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中解析未知键名的JSON获取最新加密货币USD价格

问题

我是编程新手,想要通过GET请求获取加密货币的JSON数据并解析出任意加密货币的最新USD价格。返回的JSON数据里,最新价格在Time Series (Digital Currency Intraday)对象的第一个条目里,但这个条目的键是动态变化的时间戳,没法直接通过键名访问。

以下是GET请求返回的JSON示例:

{ 
  "Meta Data": { 
    "1. Information": "Intraday Prices and Volumes for Digital Currency", 
    "2. Digital Currency Code": "BTC", 
    "3. Digital Currency Name": "Bitcoin", 
    "4. Market Code": "CNY", 
    "5. Market Name": "Chinese Yuan", 
    "6. Interval": "5min", 
    "7. Last Refreshed": "2018-05-19 15:50:00", 
    "8. Time Zone": "UTC" 
  }, 
  "Time Series (Digital Currency Intraday)": { 
    "2018-05-19 15:50:00": { 
      "1a. price (CNY)": "53014.32816681", 
      "1b. price (USD)": "8311.73569032", 
      "2. volume": "602.25300624", 
      "3. market cap (USD)": "5005767.80656960" 
    }, 
    "2018-05-19 15:45:00": { 
      "1a. price (CNY)": "53013.58227123", 
      // 省略其他数据
    }
  }
}

我的Python代码如下,目前能成功获取货币代码,但不知道怎么拿到时间序列里的第一个条目:

import requests

APIKey = "你的API密钥"
data = {'function' : 'DIGITAL_CURRENCY_INTRADAY', 'symbol' : 'BTC' , 'market' : 'CNY', 'apikey' : APIKey}
r = requests.get('https://www.alphavantage.co/query?', data)
data = r.json()

symbol = data['Meta Data']['2. Digital Currency Code'] # 这部分没问题
print(symbol)

price_data = data['Time Series (Digital Currency Intraday)'] # 怎么获取这里的第一个条目?
print(price_data)

我知道这个问题不难,但网上找不到清晰的解析方法,恳请大家帮忙!


解决方案

别担心,这个问题其实很容易解决!从Python 3.7开始,字典会保留插入顺序,而Alpha Vantage返回的时间序列是按时间倒序排列的(最新的时间戳在最前面),所以我们可以直接获取字典的第一个键值对。这里给你几种实用的方法:

方法1:用next()快速获取第一个时间戳

你可以直接迭代时间序列字典的键,用next()拿到第一个(最新的)时间戳,再通过这个时间戳提取价格:

import requests

APIKey = "你的API密钥"
data_params = {'function' : 'DIGITAL_CURRENCY_INTRADAY', 'symbol' : 'BTC' , 'market' : 'CNY', 'apikey' : APIKey}
response = requests.get('https://www.alphavantage.co/query?', params=data_params)
data = response.json()

# 获取货币代码
symbol = data['Meta Data']['2. Digital Currency Code']
print(f"加密货币代码: {symbol}")

# 获取时间序列数据
time_series = data['Time Series (Digital Currency Intraday)']

# 拿到第一个(最新的)时间戳
latest_timestamp = next(iter(time_series.keys()))
# 提取对应的USD价格
latest_usd_price = time_series[latest_timestamp]['1b. price (USD)']

print(f"最新USD价格: {latest_usd_price}")

方法2:把键转成列表取第一个元素

如果你觉得迭代的方式有点抽象,也可以把时间序列的键转换成列表,直接取索引为0的元素:

# 接上面的代码
time_series = data['Time Series (Digital Currency Intraday)']
# 转换为列表后取第一个时间戳
latest_timestamp = list(time_series.keys())[0]
latest_usd_price = time_series[latest_timestamp]['1b. price (USD)']

print(f"最新USD价格: {latest_usd_price}")

更稳妥的方法:利用元数据里的刷新时间

其实API返回的Meta Data里已经有7. Last Refreshed字段,直接用这个时间戳去取价格,完全不需要依赖字典顺序,哪怕API返回的序列顺序变了也能正常工作,推荐你用这个:

# 接上面的代码
time_series = data['Time Series (Digital Currency Intraday)']
# 从元数据里直接拿最新刷新时间
latest_timestamp = data['Meta Data']['7. Last Refreshed']
latest_usd_price = time_series[latest_timestamp]['1b. price (USD)']

print(f"最新USD价格: {latest_usd_price}")

内容的提问来源于stack exchange,提问作者Ryan Bailis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:06:24