2017-07-17 21 views
0

json APIを解析するためのPythonアプリケーションを作成しました。
3つのエンドポイントと1つのこれらの心配私があります。
エンドポイントは次のとおりです。http://coinmarketcap.northpole.ro/history.json?coin=PCNJsonを解析するとエラーが発生する

マイコード:私はh['price']['usd']を取得しようとすると

def getHistory(self, coin): 
    endpoint = "history.json?year=2017&coin=PCN" 
    data = urllib2.urlopen(self.url + endpoint).read() 
    data = json.loads(data)['history'] 
    return data 

def getOrder(self): 
    for c in self.getCoinsList(): 
     res = [] 

     symbol = c['symbol'] 
     price = self.getCoinPrice(symbol) 
     count = 0 
     count_days = len(self.getHistory(symbol)) 
     for h in self.getHistory(symbol): 
      if h['price']['usd'] > price: 
       ++count 
     percent_down = count_days/count * 100 
     line = {'symbol': symbol, 'price': price, 'percent_down': percent_down} 
     res.append(line) 
     return res 

私はこれを持っている:私はprint type(h)を行うと

File "coinmarketcap.py", line 39, in getOrder 
    if h['price']['usd'] > price: 
TypeError: string indices must be integers 

それはユニコードを返します。

+0

を使用して試してみてくださいエラーは、文字列インデックスは整数でなければならないことを示します。他の文字列を使用して文字列のインデックスを作成しようとしています。 – SuperShoot

+0

しかし私はh ['prices'] ['usd']を手に入れたいのですが、どうすればいいのですか? – Pixel

+3

私は 'getHistory'がdictを返すと仮定しています。これについては、' for h in self.getHistory(symbol) 'のように繰り返します。これは_values_ではなく、dict _keys_を提供します。 self.getHistory(シンボル).values()で 'for h 'を試してください。 –

答えて

2

getHistoryは辞書を返し、あなたはこのようにそれを反復する場合:

for h in self.getHistory(symbol): 

あなたはdictの上キー、ないを反復しています。

for h in self.getHistory(symbol).values(): # .itervalues() in python2 
1

@Pixelを使用し、代わりに値を反復するために、私はあなたがfor h in self.getHistory(symbol):が誤っているキーの値を返す、それがキーを返すことを想定していると思います。

は辞書を保存して、このように、キーマッピングにより

json_data = self.getHistory(symbol) 
for h in json_data: 
    if json_data[h]['price']['usd'] > price: 
     ++count 

や辞書の値から値を取得を取得し、あなたは時間が文字列であることを確認した

for h in self.getHistory(symbol).values(): 
    if h['price']['usd'] > price: 
     ++count 
関連する問題