Как мне преобразовать эти JSON данные в этот формат URL? - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь преобразовать эти данные в формат URL (я не знаю, технические термины для этого, но я думаю, вы понимаете, о чем я спрашиваю) Это данные тела:


body = {
        'dont-ask-for-email': 0,
        'action': 'submit_user_review',
        'post_id': 61341,
        'email': '',
        'subscribe': 1,
        'previous_hosting_id': '',
        'fb_token': '',
        'title': 'I suggest you guys to add more services',
        'summary': 'So far, so good. Quick response, better prices and effective support. All a com>
        'score_reliability': 10,
        'score_pricing': 10,
        'score_userfriendly': 10,
        'score_support': 10,
        'score_features': 10,
        'hosting_type': 'dedicated-server',
        'author': 'Andrew McCarthy',
        'social_link': '',
        'site': '',
        'screenshot[image][]': '',
        'screenshot[description][]': '',
        'user_data_process_agreement': 1,
        'user_email_popup': '',
        'subscribe_popup': 1,
        'email_asked': 0
}

Мне нужен этот формат для запуска моего python сценария

jsondata = 'dont-ask-for-email=0&action=submit_user_review&post_id=61341&email=&subscribe=1&previous_hosting_id=&fb_token=&title=I+suggest+you+guys+to+add+more+services&summary=So+far,+so+good.+Quick+response,+better+prices+and+effective+support.+All+a+company+needs,+they+got+it.&score_reliability=10&score_pricing=10&score_userfriendly=10&score_support=10&score_features=10&hosting_type=dedicated-server&author=Manik+Lal&social_link=&site=&screenshot%5Bimage%5D%5B%5D=&screenshot%5Bdescription%5D%5B%5D=&user_data_process_agreement=1&user_email_popup=&subscribe_popup=1&email_asked=1'

Я попытался сбросить его с помощью

jsondata = json.dumps(body)

Когда я print(jsondata) после запуска кода, я получаю точно такой же формат.

Существует ли какая-либо библиотека или метод для решения этой проблемы?

Ответы [ 2 ]

3 голосов
/ 25 апреля 2020

Вы можете использовать метод urllib.parse.urlencode для кодирования словаря в качестве строки аргумента URL:

import urllib.parse
encoded = urllib.parse.urlencode(body)
# encoded = 'dont-ask-for-email=0&action=submit_user_review&post_id=6134 ... '
0 голосов
/ 25 апреля 2020

Вам нужно преобразовать json в строку запроса.

Используя jsonurl:

import jsonurl    
d = {"one" : 1, "two" : 2}    
print(jsonurl.query_string(d))   # one=1&two=2

РЕДАКТИРОВАТЬ :

Без использования встроенного или 3PL:

body = {
        'dont-ask-for-email': 0,
        'action': 'submit_user_review',
        }            

query_str = ''
for key in body.keys():
    query_str += str(key) + '=' + str(body[key]) + "&"

print(query_str[:-1])

ВЫХОД:

action=submit_user_review&dont-ask-for-email=0 
...