Как удалить двойную кавычку из значения ключа в словаре
У меня есть эта полезная нагрузка:
"cardType": "CHOICE",
"step": 40,
"title": {"en-GB": "YOUR REPORT"},
"description": {"en-GB": ""},
"options": [
{"optionId": 0, "text": {"en-GB": "Ask me"}},
{"optionId": 1, "text": {"en-GB": "Phone a nurse"}},
{"optionId": 2, "text": {"en-GB": "Download full report"}},
],
"_links": {
"self": {
"method": "GET",
"href": "/assessments/898d915e-229f-48f2-9b98-cfd760ba8965",
},
"report": {
"method": "GET",
"href": "/reports/17340f51604cb35bd2c6b7b9b16f3aec",
},
},
}
Затем я кодирую его следующим образом и перенаправляю на просмотр отчета:
url = reverse("my-reports")
reverse_url = encodeurl(data, url)
Вывод urlencode возвращается в следующем виде:
"/api/v2/ada/reports?cardType=CHOICE&step=40&title="
"%7B%27en-GB%27%3A+%27YOUR+REPORT%27%7D&description="
"%7B%27en-GB%27%3A+%27%27%7D&options="
"%5B%7B%27optionId%27%3A+0%2C+%27text%27%3A+%7B%27en-GB"
"%27%3A+%27Ask+me%27%7D%7D%2C+%7B%27optionId%27%"
"3A+1%2C+%27text%27%3A+%7B%27en-GB%27%3A+%27Phone+a+nurse"
"%27%7D%7D%2C+%7B%27optionId%27%3A+2%2C+%27text%27%3A+%7B"
"%27en-GB%27%3A+%27Download+full+report%27%7D%7D%5D&_links="
"%7B%27self%27%3A+%7B%27method%27%3A+%27GET%27%2C+%27href%27%"
"3A+%27%2Fassessments%2F898d915e-229f-48f2-9b98-cfd760ba8965"
"%27%7D%2C+%27report%27%3A+%7B%27method%27%3A+%27GET%27%"
"2C+%27href%27%3A+%27%2Freports%2F"
"17340f51604cb35bd2c6b7b9b16f3aec%27%7D%7D"
В моем представлении отчета я получаю полезную нагрузку из строки запроса url:
class Reports(generics.GenericAPIView):
permission_classes = (permissions.AllowAny,)
def get(self, request, *args, **kwargs):
result = request.GET
data = result.dict()
print(data)
Теперь проблема в том, что вывод переданных данных, который выводится выше, имеет кавычки для вложенных ключей.
{
'cardType': 'CHOICE',
'step': '40', 'title': "{'en-GB': 'YOUR REPORT'}",
'description': "{'en-GB': ''}",
'options': "[{'optionId': 0,
'text': {'en-GB': 'Ask me'}},
{'optionId': 1, 'text': {'en-GB': 'Phone a nurse'}}, {'optionId': 2, 'text': {'en-GB': 'Download full report'}}]",
'_links': "{'self': {'method': 'GET', 'href': '/assessments/898d915e-229f-48f2-9b98-cfd760ba8965'}, 'report': {'method': 'GET', 'href': '/reports/17340f51604cb35bd2c6b7b9b16f3aec'}}"
}
Обратите внимание на двойную кавычку в ключах "description", "options" и т.д. Есть ли способ удалить это или передать это в представление, чтобы при разворачивании у меня были те же данные, с которых я начал.
Спасибо
import urllib.parse
import json
# convert your dict to a string
json_string = json.dumps(your_payload)
# urlencode the json string
encoded = urllib.parse.quote(json_string.encode('utf-8'))
# build the url
url = reverse("my-reports")
reverse_url = f"{url}?payload={encoded}"
Тогда, по вашему мнению:
class Reports(generics.GenericAPIView):
permission_classes = (permissions.AllowAny,)
def get(self, request, *args, **kwargs):
payload = request.GET.get('payload')
# do the encoding process in reverse
urldecoded = urllib.parse.unquote(payload)
data = json_loads(urldecoded)
print(data)