Как преобразовать сообщение от сервера в словарь в этом случае?
На запрос от сервера приходит следующее сообщение
"{\"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 шт):
Спасибо @andreymal, решением стало повторное преобразование в словарь:
res = response.json()
if type(res) == str:
res = json.loads(res)
ПРЕДУПРЕЖДЕНИЕ
Не используйте данное решение в 'постоянном' коде: оно подходит для того что бы преобразовать единичные значения (например быстро преобразовать значения где-то в сфере 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'>