JSON和Python新手。我成功调用并可以使用类似的东西获得输出
def lendbook(currency='xtl'): #GET /lendbook/:currency
r = requests.get(URL + "/lendbook/" + currency, verify=False)
rep = r.json()
return rep
print lendbook()
数据打印得很好,但对于新手来说却是一个真正的混乱。下面的示例来自Python控制台
{u'bids': [{u'timestamp': u'1405112154.0', u'rate': u'0.365', u'frr': u'No', u'amount': u'20.0', u'period': 30}], u'asks': [{u'timestamp': u'1405143214.0', u'rate': u'1.9345', u'frr': u'No', u'amount': u'0.72115369', u'period': 2}, {u'timestamp': u'1401975696.0', u'rate': u'2.0', u'frr': u'Yes', u'amount': u'0.53', u'period': 30}, {u'timestamp': u'1405011490.0', u'rate': u'2.0', u'frr': u'Yes', u'amount': u'3.44796922', u'period': 30}, {u'timestamp': u'1405137594.0', u'rate': u'2.0', u'frr': u'Yes', u'amount': u'0.12279759', u'period': 2}, {u'timestamp': u'1405139396.0', u'rate': u'2.0', u'frr': u'Yes', u'amount': u'1.84883351', u'period': 2}, {u'timestamp': u'1405140302.0', u'rate': u'2.0', u'frr': u'Yes',
显然我想格式化日期,实际上只是在费率和期限之后。我应该使用什么循环结构的字典,因为当我使用FOR循环时我似乎只返回单词' bid'和'要求'字典中有另外一种我不理解的结构吗?
真正感谢帮助,因为我了解了JSON和Python词典
答案 0 :(得分:2)
当您浏览字典时,只能使用基本的keys
循环遍历其for
。
将其更改为for key, value in dict.iteritems():
。
>>> obj = {'bids': [1000, 2999], 'asks': [4, 5]}
>>> for key, value in obj.iteritems():
... print key, value
...
bids [1000, 2999]
asks [4, 5]
>>>
答案 1 :(得分:0)
使用type()打印数据类型。通过这种方式,您可以了解json&中的数据类型。一步一步地处理它。
答案 2 :(得分:0)
看起来像你收到的JSON对象包含对象(列表)(即"出价"和"要求")所以我猜你很困惑为什么你没有访问这些值。 我建议你先抓住你感兴趣的对象(比如说"出价");
bidsList = rep['bids']
正如您所看到的那样"出价"是对象列表([]>>表示)。你现在可以迭代了。
#[{'timestamp': '1405112154.0', 'rate': '0.365', 'frr': 'No', 'amount': '20.0', 'period': 30}]
>>> bidsList = rep['bids']
>>> for obj in bidsList:
>>> print obj
...
{'timestamp': '1405112154.0', 'rate': '0.365', 'frr': 'No', 'amount': '20.0', 'period': 30}
你可以获得像
这样的值>>> for obj in bidsList:
>>> print obj['timestamp']
....
1405112154.0
>>>
我建议您创建名为Bids,Asks的类以及您知道的任何其他对象类型在您的JSON对象中返回。然后,您可以访问该对象(rep [' theObject'])并创建Bids实例(将json对象传递给它并获取实例)它将使您从所有这些中获得作为获取对象的逻辑会进入课堂本身。我会说更好的设计。
另外(我只想说你想坚持这种方法),如果你不想对事物进行硬编码,那么你想编写一个独立于JSON中返回的代码的代码。 。在这种情况下,你可以在你的情况下返回Dict的迭代器(' rep')和你在迭代中获得的每个对象,你检查类型,如果它是一个字典本身,那么你做它是相同的(键上的迭代器),或者如果它是一个列表,你就像我提到的那样迭代,否则通过键访问值。
希望这有帮助!