【问题标题】:How to parse json data python django?如何解析json数据python django?
【发布时间】:2014-02-03 18:44:36
【问题描述】:

我有 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)

但我得到了错误:

/json_update 处的 AttributeError

'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'])

我收到错误:

/json_update 处的类型错误

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

【问题讨论】:

  • 问题不在于 json 解析。如果你做了 j_obj[0]['status'] 那么它会工作得很好。

标签: python django json


【解决方案1】:

你说你的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' object has no attribute 'status'"

您更新后的代码:

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

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

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

这将遍历外部列表中的项目(您有一个项目,它是一个字典)并打印该字典的 'status' 键。

您可以看到for _ in _ 循环为您提供了您正在循环的列表中的实际项目,而不是索引。因此,在您的情况下,jo 是一个字典,这就是为什么您在尝试执行 j_obj[jo] 时收到错误“列表索引必须是整数,而不是字典”

在此处查看教程:
https://wiki.python.org/moin/ForLoop

【讨论】:

    【解决方案2】:

    您应该将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()
    ))
    

    【讨论】:

    • 是的所有键值对...我更新了代码你也请检查一下
    猜你喜欢
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2014-07-24
    • 2016-09-03
    • 2011-07-08
    • 2017-05-23
    相关资源
    最近更新 更多