如何解析json数据python Django?

2024-04-19 11:34:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有JSON数据,我想解析它。

我使用了下面的代码:

def json_update(request):
     j = urllib2.urlopen('http://ec2-72-44-51-113.compute-1.amazonaws.com:8001/get_latest_verification')
     j_obj = json.load(j) 
     print j_obj.status
     return HttpResponse(j_obj.status)

但我发现了一个错误:

AttributeError at/json\u更新

“list”对象没有“status”属性

我的json数据:

[{"status": "Registered", "credential": "10000323xsds", "scan_time": "Jan.15,2014, 03:30 pm", "asset_code": "cls103", "emp_id": "LS07", "location": "BLR-10", "auth_code": "DSC(Verisign", "operator": "pradeep", "id": 538}]

解析json数据的正确方法是什么。

但当我把代码更新为:

更新代码:

def json_update(request):
     j = urllib2.urlopen('http://ec2-72-44-51-113.compute-1.amazonaws.com:8001/get_latest_verification')
     j_obj = json.load(j)
     for jo in j_obj: 
      print j_obj[jo]['status']
     return HttpResponse(j_obj[jo]['status'])

我得到错误:

TypeError at/json_update

列表索引必须是整数,而不是dict


Tags: 数据代码jsonobjhttprequestdefstatus
2条回答

你说你的json数据是:

[{"status": "Registered", "credential": "10000323xsds", "scan_time": "Jan.15,2014, 03:30 pm", "asset_code": "cls103", "emp_id": "LS07", "location": "BLR-10", "auth_code": "DSC(Verisign", "operator": "pradeep", "id": 538}]

这意味着当你做j_obj = json.load(j)时,你的j_obj是一个列表。(注意外面的[ ])。这就是为什么当你做print j_obj.status的时候,你得到了一个错误“list”对象没有属性“status”

您更新的代码:

for jo in j_obj: 
    print j_obj[jo]['status']

这是在Python中使用for _ in _循环的错误方法,您这样做与在Javascript中一样。在Python中,您可以这样编写:

for jo in j_obj: 
    print jo['status']

这将遍历外部列表中的项(只有一个项,即dict),并打印该dict的'status'

您可以看到for _ in _循环为您提供循环列表中的实际项,而不是索引。所以在你的例子中,jo是一个dict,这就是为什么当你试图做j_obj[jo]时,你得到的错误列表索引必须是整数,而不是dict“。

请参见此处的教程:
https://wiki.python.org/moin/ForLoop

您应该将status作为字典项访问,而不是作为属性访问。 这本词典是一个单子。

所以printreturn语句应该读为:

print j_obj[0]['status']
return HttpResponse(j_obj[0]['status'])

更新

要打印所有键、值对:

for key, value in j_obj[0].items():
    print key, value
return HttpResponse('\n'.join( # OR   '<br>'.join
    '{} {}'.format(key, value)
    for key, value in j_obj[0].items()
))

相关问题 更多 >