2017-07-17 101 views
0

我創建了一個python應用程序來解析一個json API。
有3個端點和1個這些擔心我。
端點是:http://coinmarketcap.northpole.ro/history.json?coin=PCN當我解析一個JSON時出錯

我的代碼:

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 

當我試圖讓h['price']['usd']我有這樣的:

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

當我做print type(h)它返回Unicode。

+0

所以,你已經證實,h是一個字符串,錯誤表示字符串索引必須是整數。您正試圖使用​​其他字符串爲該字符串編制索引。 – SuperShoot

+0

但我想要h ['price'] ['usd'],我該怎麼做? – Pixel

+3

我假設'getHistory'返回一個字典,你就像這樣迭代它:'for self.getHistory(symbol)'中的h。這給你字典_keys_,而不是_values_。在self.getHistory(symbol).values()'中試試'h。 –

回答

2

getHistory返回一個字典,當你遍歷這樣的:

for h in self.getHistory(symbol): 

你遍歷字典,不

要通過價值迭代,而應使用

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