requests экранирование экранирования?

Я экранирую бэк слэшем некоторые кавычки, как это требует документация API:

import requests
r = requests.post(f"https://iiko.biz:9900/api/0/events/eventsMetadata?access_token={token}&request_timeout={requestTimeout}", json= {"organizationId" : organizainonId, "eventsSettings": "{\"fromRevision\": \"-1\", \"dateFrom\": \"2020-07-07 12:00:00\", \"dateTo\": \"2020-08-11 12:00:00\"}"})

Но, когда я выполняю r.request.body , то вижу там следующее:

b'{"organizationId": "83xxxx1-xxxx-11e7-xxxx-d8d382565926f", "eventsSettings": "{\\"fromRevision\\": \\"-1\\", \\"dateFrom\\": \\"2020-07-07 12:00:00\\", \\"dateTo\\": \\"2020-08-11 12:00:00\\"}"}'

Тоесть был добавлен еще один бэк слэш, там где я экранировал двойные кавычки. Как это пофиксить?

Пример body, который должен улетать на сервер:

{
    "organizationId" : "D688C80B-91B3-4829-AC26-43D7CDE8CD3D",
    "eventsSettings" : "{
        \"fromRevision\" : \"-1\",
        \"dateFrom\" : \"2018-12-01 12:00:00\",
        \"dateTo\" : \"2018-12-02 12:00:00\"
    }"
}

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

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

Для корректного формирования json-файлов нужно пользоваться функцией dumps модуля json

import json
import requests

js_data = {
    "organizationId" : "D688C80B-91B3-4829-AC26-43D7CDE8CD3D",
    "eventsSettings" : {
        "fromRevision" : -1,
        "dateFrom" : "2018-12-01 12:00:00",
        "dateTo" : "2018-12-02 12:00:00"
    }
}

json_str = json.dumps(js_data)

r = requests.post(f"https://iiko.biz:9900/api/0/events/eventsMetadata?access_token={token}&request_timeout={requestTimeout}", json= json_str)
→ Ссылка