簡體   English   中英

Python:查詢字典到 JSON

[英]Python: Query Dict to JSON

我試圖通過使用encodeURIComponent()在查詢字符串中將一些 JSON 發送到我的 django 應用程序,我的服務器端點接收數據就好了,因為我可以將其打印到 python 控制台。

print request.GET

以下行的輸出采用這種格式

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

我想將其轉換為 JSON,這樣我就可以用來獲取一些信息,但我已經嘗試使用json.loads和其他方法來操作數據,但沒有運氣。

我的輸出應該是這樣的

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

關於我在這里做錯了什么的任何提示?

QueryDict類是常規 Python 字典的子類,不同之處在於它處理同一個鍵的多個值(參見MultiValueDict實現)。

如果要將其轉儲為字符串,只需使用json.dumps()

json.dumps(my_query_dict) 

還有一個相關的dict()方法:

QueryDict.dict()

返回 QueryDict 的 dict 表示。

我正在使用Python 2.7.13Django 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

如果要處理多值,可以執行以下操作:

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()})

其它的辦法:

from django.http import QueryDict

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM