2014-02-18 67 views
0

我在这里和其他地方通过Google搜索了大量的文章,并在docs.python.org上阅读了一些相关的文档,但仍然卡住了。在Python中打印JSON值

我正在从API响应象下面这样:

{"status":"active","perms":1,"data":{"40332895":{"user_values":{"delta":-203,"value":53.32,"order":42509}}}} 

我没有问题,打印“状态”或“数据”。但是,我所能抓到的只是* user_values *的名称,而不是其中的日期。

一直在它的方式很长,并希望有人能指出我在正确的方向。 Python相当新颖,如果我需要改变我的做法,因为这是不好的做法,或者有更简单的方法来获得我期待的结果,请让我知道。

代码:

import json 
import urllib2 

url = urllib2.urlopen('http://URLofAPI.com') 
json_url = json.load(url) 

api_result = json_url 

for doc in api_result['data']['40332895']['user_values']: 
    print doc 

输出:
三角洲
价值
为了

我真正想要得到的是他们的值(即: '-203',' 53.32','42509')。

我基本上试图将数据保存到一个list \ dict(单独或单独),然后用其他数据打印。我尝试了各种各样的东西,无法管理它。我相信这可能是一种超级简单的东西,但是这让我发疯。 :)

而且,我真的很期待下面给我“42509”,但我得到一个错误:

for doc in api_result['data']['40332895']['user_values']['order'] 

提前感谢!

回答

2

您正在询问user_values字典的关键字并获取它们。试试这个:

uv = api_result['data']['40332895']['user_values'] 
for doc in uv: 
    print uv[doc] 
+0

这正是我的问题所在。哇,10分钟得到答案。我不应该长时间打我的头靠在墙上,直到我寻求帮助。谢谢! – pokie

1

在你的例子中api_result['data']['40332895']['user_values']是一个字典。 如果您遍历字典,您将获得密钥。在原始示例和mgkrebbs答案中就是这种情况。 不过,如果你遍历字典的你得到的(键,值).iteritems()(或.items())对在一个元组:

uv = api_result['data']['40332895']['user_values'] 
for key,value in uv.iteritems(): 
    print key, value 

如果你只需要值,你遍历.itervalues()

uv = api_result['data']['40332895']['user_values'] 
for value in uv.itervalues(): 
    print value 

或者,如果你只需要值的列表:

my_list = api_result['data']['40332895']['user_values'].values() 

().itervalues()和.values之间的差异是个在前者给你一个iterable(一次返回一个值的对象,但不会在内存中创建结构),而后者给你一个列表。