我正在编写一个调用ethermine.org API的python脚本,然后我使用telegraf将数据输入influxdb,并在grafana上显示。 Influxdb和telegraf接受json格式和我所做的前两个API拉取,它们以以下格式显示数据(我用x代替返回的实际值):
{"time": xxx, "lastSeen": xxx, "reportedHashrate": xxx, "currentHashrate": xxx, "validShares": x, "invalidShares": 0, "staleShares": 0, "averageHashrate": x, "activeWorkers": x, "unpaid": xx, "unconfirmed": null, "coinsPerMin": xxxx, "usdPerMin": xxxx, "btcPerMin": xxxx}
然而,我尝试执行的第三次拉动似乎是输出一个额外的“}”字符,并且似乎格式略有不同(而不是像currentHashrate这样的标记,它有一个标记,比如price:then{两个以上的标记}因此,几乎就像价格类别中的标签列表一样,我认为额外的“}”可能来自于此
{"topMiners": [], "minedBlocks": [{"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}, {"number": x, "miner": "x", "time": x}], "poolStats": {"hashRate": x, "miners": x, "workers": x, "blocksPerHour": x}, "price": {"usd": xxx, "btc": xxx}}
请注意,我是python新手,所以在我尝试使用google修复它的过程中,我没有成功,因为我可能用了错误的方法。我将上传我在telegraf中遇到的错误的屏幕截图,然后是我尝试修复它时遇到的python错误的屏幕截图。也可以在下面找到我的python脚本代码
我认为与这些代码行相关的python错误
print(statsPool.text)
poolS=json.loads(statsPool.text)
print(f'{poolS["price"]}')
import json
import requests
# Miner - Statistics Armand
keyArmand = 'xxxxxxxxxx'
urlArmand = 'https://api.ethermine.org/miner/' + keyArmand + '/currentStats'
# Miner - Statistics Altus
keyAltus = 'xxxxxxxxxxx'
urlAltus = 'https://api.ethermine.org/miner/' + keyAltus + '/currentStats'
# PoolStats
urlPoolStats = 'https://api.ethermine.org' + '/poolStats'
#call 1
statsArmand = requests.get(urlArmand)
#call 2
statsAltus = requests.get(urlAltus)
#call 3
statsPool = requests.get(urlPoolStats)
print(json.dumps(json.loads(statsArmand.text)['data']))
print(json.dumps(json.loads(statsAltus.text)['data']))
#problem line (prints an extra '}' at the end
print(json.dumps(json.loads(statsPool.text)['data']))
#next 3 lines is what I tried to do to fix it (either need to get rid of the extra '}' at the end or I just need the price tag displayed in the correct format
print(statsPool.text)
poolS=json.loads(statsPool.text)
print(f'{poolS["price"]}')
作为总结:第三个python json API调用将返回一个不同的格式给前两个,我想将第三个重新格式化为与前两个相同的格式,或者只提取格式(类似于{“time”:xxx})中以美元表示的价格(价格:“USD”部分),因为这是我想要使用的唯一部分
在以JSON格式返回数据的API上使用
requests.get()
时,您可能希望requests
为您处理数据,而不是将其作为文本访问并手动解析由于返回的JSON对象包含嵌套的JSON对象,因此当您将其作为文本获取时,必须手动解析每个嵌套对象(例如,使用
json.loads()
)在对
requests.get(urlPoolStats)
的调用中,返回的JSON对象包含另一个JSON对象,在调用json.loads(statsPool.text)
时,该对象不会被解析,这很可能是您尝试访问price
时失败的原因对^{} 的调用返回一个^{} object ,该^{} object 实现一个^{} method ,该^{} method 将为您正确解析数据,并将其作为Pyton
dict
返回,所有嵌套的JSON对象都可以作为dict
中的键访问换句话说,不是
你想做的是
这将返回一个Python
dict
,您现在可以得到如下价格:相关问题 更多 >
编程相关推荐