Как преобразовать сообщение от сервера в словарь в этом случае?

На запрос от сервера приходит следующее сообщение

"{\"msgTm\": \"2024-07-01T14:36:38.109944Z\", \"message\": \"Wrong file extension: .xlsx. Available values: .pdf .jpg, .jpeg, .png\"}"

Я пробую преобразовать эту строку в словарь

res = response.json()

Но в результате получаю строку вида:

{"msgTm": "2024-07-01T14:42:53.114348Z", "message": "Wrong file extension: .xlsx. Available values: .pdf .jpg, .jpeg, .png"}

Возвращается именно тип объекта строка, а не словарь.

При этом если пробую сделать преобразование отдельно строки в словарь то все получается:

import json

response = '{\"msgTm\": \"2024-07-01T14:36:38.109944Z\", \"message\": \"Wrong file extension: .xlsx. Available values: .pdf .jpg, .jpeg, .png\"}'
res = json.loads(response)

print(res)
print(type(res))

{'msgTm': '2024-07-01T14:36:38.109944Z', 'message': 'Wrong file extension: .xlsx. Available values: .pdf .jpg, .jpeg, .png'}
<class 'dict'>

А так не получается:

    if response.status_code == 200:
        access_token = "токен"
        headers = {'Authorization': f'Bearer {access_token}'}
        files = {
            'structuredDocument': (file_name, file_io_obj),
        }
        response = requests.post('https://test.ru', headers=headers, files=files, verify=False)
        return response.json()

Ответы (2 шт):

Автор решения: Kadenza

Спасибо @andreymal, решением стало повторное преобразование в словарь:

res = response.json()
if type(res) == str:
    res = json.loads(res)
→ Ссылка
Автор решения: Artyom Zaborschicov

ПРЕДУПРЕЖДЕНИЕ

Не используйте данное решение в 'постоянном' коде: оно подходит для того что бы преобразовать единичные значения (например быстро преобразовать значения где-то в сфере DS, или для отладки). Данное решение имеет ряд проблем по безопасности и не только. Тут оно было приведено больше как пример.

Предложу чуток другое решение. Вы можете просто использовать функцию eval из стандартной библиотеки. Вы просто передаете строку в функцию и она преобразует строку в словарь. Эта функция просто возвращает значение исполненного кода. В данном случае - строки со словарем. Пример:

st = "{\"msgTm\": \"2024-07-01T14:36:38.109944Z\", \"message\": \"Wrong file extension: .xlsx. Available values: .pdf .jpg, .jpeg, .png\"}"

st2dict_res = eval(st)

print(st2dict_res)
print(type(st2dict_res))

Output:

{'msgTm': '2024-07-01T14:36:38.109944Z', 'message': 'Wrong file extension: .xlsx. Available values: .pdf .jpg, .jpeg, .png'}
<class 'dict'>
→ Ссылка