JSON输出到Python字典 - 难以理解

时间:2014-07-12 06:19:14

标签: python json dictionary

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词典

3 个答案:

答案 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')和你在迭代中获得的每个对象,你检查类型,如果它是一个字典本身,那么你做它是相同的(键上的迭代器),或者如果它是一个列表,你就像我提到的那样迭代,否则通过键访问值。

希望这有帮助!