在json api调用中查找特定值

时间:2017-12-19 18:04:20

标签: python json python-3.x api

即使API上的日期不断变化,我能否找到此股票的close价格?

API:

'Time Series (1min)': {  
     '2017-12-19 13:01:00':{  
           '1. open':'196.4100',
           '2. high':'196.5075',
           '3. low':'196.3800',
           '4. close':'196.3800',
           '5. volume':'4961'
            }
}

Python代码:

print('Grabbing stock price...')
ourl = req.get(url)
im = ourl.json()
return im #return closing price

3 个答案:

答案 0 :(得分:0)

使用im = { 'Time Series (1min)': { '2017-12-19 13:01:00': { '1. open': '196.4100', '2. high': '196.5075', '3. low': '196.3800', '4. close': '196.3800', '5. volume': '4961' } } } 将您的dict转换为tupples。然后使用索引访问元素。

print im['Time Series (1min)'].items()[0][1]['4. close'] # prints 196.3800

Python 2

print(list(a['Time Series (1min)'].items())[0][1]['4. close']) # prints 196.3800

对于 Python 3 ,这应该更改如下

a['Time Series (1min)'].items()

或者您可以遍历<app-header-layout>可迭代

答案 1 :(得分:0)

您在自己的示例中几乎已经拥有它,只需将0替换为实际日期。

im['Time Series (1min)']['2017-12-19 13:01:00']['4. close']
# output '196.3800'

编辑循环:

dict的问题是,您没有为dict编制索引,而是使用键访问项目。这是拥有一个关键值对的主要目的。 或者更正确的是,当您需要索引某些内容时,请不要使用dict

我建议您使用类似pandas的内容。

import pandas as pd

# option 1
df = pd.DataFrame(ourl.json())
df.columns = ['Meta', 'TS']  # save time typing spaces
return df.TS[2]['4. close']

# option 2
df = pd.DataFrame(ourl.json())
return df.iloc[:, 1][2]['4. close']

# output 
  '196.3800'

这样,每次获取项目时都可以返回单个值,并通过索引返回该值。(部分)

P.S。你没有告诉我们ourl.json()返回什么,我假设它在这里返回一个字典。特别是,你想要做的是正确编制索引,组织字符串声音对我来说有点混乱..因为我们实际上并没有组织字符串:)

答案 2 :(得分:0)

在不知道时间的情况下提取价格的另一种方法是使用带有json包的import json import urllib.request def extract_json(f): json_decode = json.load(f) time_series = json_decode['Time Series (1min)'] for data in time_series: print(time_series[data]['3. low']) opener = urllib.request.FancyURLopener({}) url = "http://localhost:8092/sample_json.json" f = opener.open(url) extract_json(f) 包和一些循环:

{
  "Time Series (1min)": {
    "2017-12-19 13:01:00": {
      "1. open": "196.4100",
      "2. high": "196.5075",
      "3. low": "196.3800",
      "4. close": "196.3800",
      "5. volume": "4961"
    }
  }
}

如果服务器上的输入是:

196.3800

运行脚本的结果是:

3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 17:54:52) [MSC v.1900 32 bit (Intel)]

试过这个版本:

rand()