web-dev-qa-db-fra.com

TypeError: b'1 'n'est pas sérialisable JSON

J'essaie d'envoyer une demande POST en JSON.

* la variable e-mail est de type "octets"

def request_to_SEND(email, index):
    url = "....."
    data = {
        "body": email.decode('utf-8'),
        "query_id": index,
        "debug": 1,
        "client_id": "1",
        "campaign_id": 1,
        "meta": {"content_type": "mime"}
    }
    headers = {'Content-type': 'application/json'}

    try:
        response = requests.post(url, data=json.dumps(data), headers=headers)
    except requests.ConnectionError:
        sys.exit()

    return response

Je reçois l'erreur:

 File "C:\Python34\lib\json\encoder.py", line 173, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: b'1' is not JSON serializable

Pourriez-vous s'il vous plaît me dire ce que je fais mal?

30
Teodora

Cela se produit car vous passez un objet bytes dans le dict data (b'1', en particulier), probablement comme la valeur de index. Vous devez le décoder en un objet str avant json.dumps peut fonctionner avec:

data = {
    "body": email.decode('utf-8'),
    "query_id": index.decode('utf-8'),  # decode it here
    "debug": 1,
    "client_id": "1",
    "campaign_id": 1,
    "meta": {"content_type": "mime"}
}
41
dano