如何将JSON字符串转换为Python对象(字典)

问题描述 投票:0回答:1

我有一个奇怪的问题。运行Django 3.0.1,在我看来,我有一条try语句。由于某种原因,我无法将JSON字符串转换为Python对象(字典)。这是我的代码:

        try:
            message_to_clientsservice = {
                'id': id_id,
                'name': 'create-member-client-for-tenant-setup',
                'payload': {
                    'clientName': client_name,
                    'kbCorporationId': int(kb_corp_id),
                    'email': email,
                    'clientTypeId': client_type_id,
                    'address': {
                        'countryCode': country_code,
                    },
                    'phoneNumbers': []
                }
            }

            clientsservice_request_header = {
                'Content-Type': 'application/json',
                'ServiceAccessToken': service_access_token,
                'Ocp-Apim-Subscription-Key': ocp_apim_subscription_key,
                'Authorization': 'Bearer ' + bearer_token
            }

            # print(message_to_clientsservice)
            # print(type(message_to_clientsservice))
            # print(json.dumps(message_to_clientsservice))
            # print(type(clientsservice_request_header))
            # print(clientsservice_request_header)
            clients_service_response = requests.post(clientsservice_url,
                                                     headers=clientsservice_request_header,
                                                     data=json.dumps(message_to_clientsservice))
            print(clients_service_response.status_code)
            json_data_scrambledegg = clients_service_response.text
            for r in (('\\', ''), ('{\\', ''), ('\"\"}\"}', '\"\"}}'), ('\"payload\":\"', '\"payload\":')):
                json_data_scrambledegg = json_data_scrambledegg.replace(*r)
            print(type(json_data_scrambledegg))
            print(json_data_scrambledegg)
            data = json.loads(json_data_scrambledegg)
            print(data)
        except:
            print('Something went wrong! Try again or contact your Sysadmin!')
            messages.warning(request, 'Something went wrong! Try again or contact your Sysadmin!')
            return render(request, 'create_member_company/create_member_feedback.html')
        else:
            messages.success(request, 'Your Message was sent successfully!')
            return render(request, 'create_member_company/create_member_feedback.html')

并获得此输出:



January 09, 2020 - 04:58:01
Django version 3.0.1, using settings 'erm_admin.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
200
<class 'str'>
{"id":"66995ab6-2962-465c-aa52-f68108f2ac97","name":"create-member-client-for-tenant-setup-response","correlationId":"025bb4aa-9396-4202-bcbc-fcbabfd498a8","payload":{"newlyCreatedClient":{"clientId":7270,"clientName":"Milk Man 1","corporationId":4520226,"corporationName":"Milk Man 1"},"suggestedExistingClients":null,"success":true,"errorMessage":""}}
Something went wrong! Try again or contact your Sysadmin!
[09/Jan/2020 04:58:07] "POST /create_member/ HTTP/1.1" 200 7885


我的“尝试”中的最后2行失败。它们是(来自上面的try语句)。

data = json.loads(json_data_scrambledegg)
print(data)

python django
1个回答
0
投票

只需致电response.json()即可获得字典:

try:
    ...
    clients_service_response = requests.post(clientsservice_url,
                                             headers=clientsservice_request_header,
                                             data=json.dumps(message_to_clientsservice))
    print(clients_service_response.status_code)
    data = clients_service_response.json() # this line!!
    print(data)
except:
    ...
else:
    ...

正确的代码

try:
    message_to_clients_service = {
        'id': id_id,
        'name': 'create-member-client-for-tenant-setup',
        'payload': {
            'clientName': client_name,
            'kbCorporationId': int(kb_corp_id),
            'email': email,
            'clientTypeId': client_type_id,
            'address': {
                'countryCode': country_code,
            },
            'phoneNumbers': []
        }
    }

    clients_service_request_header = {
        'Content-Type': 'application/json',
        'ServiceAccessToken': service_access_token,
        'Ocp-Apim-Subscription-Key': ocp_apim_subscription_key,
        'Authorization': 'Bearer ' + bearer_token
    }

    clients_service_response = requests.post(clientsservice_url,
                                             headers=clients_service_request_header,
                                             json=message_to_clients_service)
    print(clients_service_response.status_code)
    data = clients_service_response.json()  # this line!!
    print(data)
except:
    print('Something went wrong! Try again or contact your Sysadmin!')
    messages.warning(request, 'Something went wrong! Try again or contact your Sysadmin!')
    return render(request, 'create_member_company/create_member_feedback.html')
else:
    messages.success(request, 'Your Message was sent successfully!')
    return render(request, 'create_member_company/create_member_feedback.html')
© www.soinside.com 2019 - 2024. All rights reserved.