首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON输出到Python字典-理解困难

JSON输出到Python字典-理解困难
EN

Stack Overflow用户
提问于 2014-07-12 06:19:13
回答 3查看 185关注 0票数 0

是JSON和Python的新手。我成功地调用并可以使用这样的方法获得输出

代码语言:javascript
复制
def lendbook(currency='xtl'): #GET /lendbook/:currency

    r = requests.get(URL + "/lendbook/" + currency, verify=False)
    rep = r.json()

    return rep

print lendbook()

数据打印出来很好,但对于一个新的初学者来说,这确实是个混乱的问题。下面是Python控制台中的一个示例

代码语言:javascript
复制
{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循环时一样,我似乎只返回了“出价”和“询问”两个词。显然字典里还有另一种我不懂的结构?

当我在JSON和Python字典中寻找帮助时,我真的很感激

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-12 06:56:16

您得到的JSON对象似乎包含对象(列表)(即“出价”和“询问”),因此我猜您对为什么不访问这些值感到困惑。我建议你先找到你感兴趣的对象(比如“出价”);

代码语言:javascript
复制
bidsList = rep['bids']

如您所见,“出价”是一个对象列表([] >>表示)。你现在可以迭代了。

代码语言:javascript
复制
#[{'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}

你可以得到这样的值,

代码语言:javascript
复制
>>> for obj in bidsList:
>>>   print obj['timestamp']
....
1405112154.0 
>>>

我建议您在您的JSON对象中创建名为的类,以及您所知道的任何其他对象类型。然后,您可以访问对象(rep‘’theObject‘)并创建出价实例(将json对象传递给它并获得一个实例),它将从所有这些中拯救您,因为获取对象的逻辑将进入类本身。更好的设计我会说。

另外(假设您希望坚持这种方法),如果您不想硬编码,那么假设您想要编写一个独立于在JSON中返回的代码。在这种情况下,您可以在所返回的Dict上使用Iterator ('rep'),对于在迭代中得到的每个对象,检查类型,如果它本身是dict本身,则对它执行相同的操作(迭代键上的迭代器),或者如果它是一个列表,就像我提到的那样迭代,否则通过键访问值。

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2014-07-12 06:23:44

当您遍历字典时,您只使用基本的keys循环循环它的for

将其改为for key, value in dict.iteritems():

代码语言:javascript
复制
>>> obj = {'bids': [1000, 2999], 'asks': [4, 5]}
>>> for key, value in obj.iteritems():
...     print key, value
... 
bids [1000, 2999]
asks [4, 5]
>>> 
票数 2
EN

Stack Overflow用户

发布于 2014-07-12 06:26:39

使用type()打印数据类型。这样,您就可以知道json中的数据类型,并逐步处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24710244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档