无法解析Python中的JSON对象

时间:2013-06-05 06:46:53

标签: python json parsing unicode

我搜索过每一个地方,但之前没有人说过这个错误。

obj将返回一个unicode对象,但它将返回以下错误

Exception Type: AttributeError  
Exception Value:'unicode' object has no attribute 'pk'

如果我对响应的结果进行硬编码,则可以正常工作 CustomerAccount.py

from django.contrib.auth.models import User  

检查登录

 return user

api.py

result = CustomerAccount.login(username, password)  
return HttpResponse(json.dumps(result), content_type="application/json")

views.py

import urllib2  
import json

res = urllib2.urlopen("http://127.0.0.1:8000/api/login?username=admin&password=admin").read()  
obj = json.loads(res)
print obj[0].pk

打印对象的结果:

  

[{“pk”:1,“model”:“auth.user”,“fields”:{“username”:“admin”,“first_name”:“Admin”,“last_name”:“admin”, “is_active”:true,“is_superuser”:true,“is_staff”:true,“last_login”:“2013-05-29T08:08:43.859Z”,“groups”:[],“user_permissions”:[],“密码“:”pbkdf2_sha256 $ 10000 $ 1HdCOPgsoXvx $ 8jjOpTFVcVAtUshpjJDPEGs / TRq7jeJ2T / 2i55FIPeM =“,”email“:”admin @ admin.com“,”date_joined“:”2013-05-15T07:59:30Z“}}]

2 个答案:

答案 0 :(得分:3)

你的类型错了:

  • objlist
  • obj[0]dict
  • dict没有pk属性,但您可以使用"pk"
  • 检索密钥obj[0]['pk']的值

答案 1 :(得分:2)

你说你得到了

Exception Value:'unicode' object has no attribute 'pk'

检索obj[0].pk时。如果是数据类型错误,您将获得'dict' object has no attribute 'pk'

问题是您的obj[0]不是您所期望的dict,或list,但它是 unicode字符串

根据评论,这就是:

  1. 您生成JSON对象服务器端。
  2. JSON编码。您现在有一个 unicode字符串
  3. 再次对其进行JSON编码 。现在你有一个unicode字符串作为JSON对象。

  4. 从网址中检索。

  5. 解码一次。您现在拥有 unicode string ,它对对象进行编码。
  6. 从unicode字符串中提取pk ......你不能这样做。
  7. 快速解决方法是将对象解码两次。真正的解决方法是检测双重编码发生的位置并防止发生这种情况。

    应该告诉我发生了什么的事实是:

    [{"pk": 1, "model": ...
    

    如果那是 Python 对象(而不是JSON编码),那就是:

    [{u'pk': 1, u'model': ...