Python:查询Dict到JSON

时间:2014-09-11 23:13:48

标签: python json django dictionary django-views

我正在尝试使用encodeURIComponent()在查询字符串中向我的django应用程序发送一些JSON我的服务器enpoint接收数据就好了,因为我可以将它打印到python控制台。

print request.GET

以下行的输出采用此格式

<QueryDict: {u'[my json array]': [u''}}>

我想将其转换为JSON,以便我可以使用获取一些信息,但我尝试使用json.loads和其他操作数据的方法,但没有运气。

我的输出应该是这样的

[{u'something': something}, {u'something1': something2}, {u'something3': something3}]

关于我在这里做错了什么提示?

4 个答案:

答案 0 :(得分:13)

QueryDict类是常规Python字典的a subclass,除了它为同一个键处理多个值(参见MultiValueDict implementation)。

如果要将其转储为字符串,只需使用json.dumps()

json.dumps(my_query_dict) 

还有一个相关的dict()方法:

  

QueryDict.dict()

     

返回QueryDict的dict表示。

答案 1 :(得分:1)

我正在使用 Python 2.7.13 Django 1.11.2 。您可以获取 数据 字典,以便您可以使用相关的 访问 数据

data = json.loads(request.GET.dict().keys()[0])

我用来获取数据功能中的代码块输出也可在底部找到。这将显示上述声明部分的

但是我在这里使用 POST 代替 GET ,因为我们正在向服务器发布数据。

因此,上述 1行代码足以在您的案例中将数据作为字典获取。

import json

# request.POST 
print "request.POST = ", request.POST
print type(request.POST),"\n"

# DICTIONARY
print "request.POST.dict() = ", request.POST.dict()
print type(request.POST.dict()), "\n"

# LIST ALL KEYS(here is only 1)
print "request.POST.dict().keys() = ", request.POST.dict().keys()
print type(request.POST.dict().keys()), "\n"

# UNICODE
print "request.POST.dict().keys()[0] = ", request.POST.dict().keys()[0]
print type(request.POST.dict().keys()[0]), "\n"

# GETTING THE ORIGINAL DATA(as Dictionary)
data = json.loads(request.POST.dict().keys()[0])    

# PRINTING DATA AND IT'S TYPE
print "json.loads(request.POST.dict().keys()[0]): ", data
print type(data), "\n"

# ITERATING OVER ITEMS in data dictionary
for key, value in data.iteritems():
    print key, value

让我们看看输出,

request.POST = <QueryDict: {u'{"fname":"Rishikesh Agrawani","email":"rishikesh0014051992@gmail.com","contact":"7353787704","message":"Have a nice day."}': [u'']}>
<class 'django.http.request.QueryDict'> 

request.POST.dict() =  {u'{"fname":"Rishikesh Agrawani","email":"rishikesh0014051992@gmail.com","contact":"7353787704","message":"Have a nice day."}': u''}
<type 'dict'> 

request.POST.dict().keys() =  [u'{"fname":"Rishikesh Agrawani","email":"rishikesh0014051992@gmail.com","contact":"7353787704","message":"Have a nice day."}']
<type 'list'> 

request.POST.dict().keys()[0] =  {"fname":"Rishikesh Agrawani","email":"rishikesh0014051992@gmail.com","contact":"7353787704","message":"Have a nice day."}
<type 'unicode'> 

json.loads(request.POST.dict().keys()[0]):  {u'message': u'Have a nice day.', u'contact': u'7353787704', u'email': u'rishikesh0014051992@gmail.com', u'fname': u'Rishikesh Agrawani'}
<type 'dict'> 

message Have a nice day.
contact 7353787704
email rishikesh0014051992@gmail.com
fname Rishikesh Agrawani

答案 2 :(得分:0)

如果要处理多个值,可以执行以下操作:

json.dumps({k: d.getlist(k) for k in d.keys()})

或使用join来实现紧凑性:

json.dumps({k: ",".join(d.getlist(k)) for k in d.keys()})

或检查这是否为多值,然后才显示为列表

 json.dumps({k: (d.getlist(k) if len(d.getlist(k)) > 1 else d[k]) for k in d.keys()})

答案 3 :(得分:0)

另一种方式:

from django.http import QueryDict

# serialize
request.session["last_get_request"] = request.GET.urlencode()

# deserialize
last_get_request = QueryDict(request.session["last_get_request"])