2016-08-20 128 views
-2

我很新。Python-JSON - 如何解析API輸出?

我寫這個python腳本實現從blockr.io的API調用來檢查多個比特幣地址的平衡。

btcaddy.txt的內容是用逗號分隔的比特幣地址。對於這個例子,讓它解析this

import urllib2 
import json 


btcaddy = open("btcaddy.txt","r") 


urlRequest = urllib2.Request("http://btc.blockr.io/api/v1/address/info/" + btcaddy.read()) 
data = urllib2.urlopen(urlRequest).read() 
json_data = json.loads(data) 

balance = float(json_data['data''address']) 
print balance 

raw_input() 

但是,它給了我一個錯誤。我究竟做錯了什麼?現在,我如何才能打印剩餘的地址?

+0

感謝張貼你的代碼,但請放一點描述你的問題:什麼是你有問題,什麼是你所期望的結果,[你嘗試過什麼(http://whathaveyoutried.com)等等遠?通過[問題清單](http://meta.stackoverflow.com/questions/156810/stack-overflow-question-checklist)將幫助我們更好地回答你的問題。謝謝! 「'data''address''後面缺少逗號和括號? –

+1

?你確定數據的內容是json格式嗎?如果你加你看到 – 2016-08-20 01:46:01

回答

1

你在代碼中做了多件事情。這是我的修復。我推薦一個for循環。

import json 
import urllib 

addresses = open("btcaddy.txt", "r").read() 

base_url = "http://btc.blockr.io/api/v1/address/info/" 
request = urllib.urlopen(base_url+addresses) 
result = json.loads(request.read())['data'] 
for balance in result: 
    print balance['address'], ":" , balance['balance'], "BTC" 

您最後也不需要輸入。

1

你的問題很清楚,但你的嘗試不是。

你說過,你有一個文件,至少不止於註冊表。所以你需要檢索這個文件的行。

with open("btcaddy.txt","r") as a: 
    addresses = a.readlines() 

現在您可以迭代註冊表並向此uri發出請求。 urllib模塊足以完成此任務。

import json 
import urllib 

base_url = "http://btc.blockr.io/api/v1/address/info/%s" 

for address in addresses: 
    request = urllib.request.urlopen(base_url % address) 
    result = json.loads(request.read().decode('utf8')) 
    print(result) 

HTTP發送字節作爲迴應,所以你應該給我們decode('utf8')的方法來處理數據。

+0

當我嘗試你的代碼中的錯誤它不會傷害,我得到 (AttributeError的:「模塊」對象有沒有屬性「請求」) –

+1

也許應該僅僅是:'請求=了urllib.urlopen() ' – zachyee

+0

如果你使用Python 2,你應該使用@ zachyee的方法。 –