2016-08-20 129 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的方法。 –