2014-06-23 3 views
21

Sto tentando di inviare una richiesta POST come JSON.TypeError: b'1 'non è serializzabile JSON

* variabile-mail è di tipo "byte"

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 

ottengo l'errore:

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 

la prego di dirmi che cosa è che sto facendo male?

+0

Ci può dare qualcosa possiamo riprodurre? Ho messo '" Hello "' in 'email' e' 0' in 'index', quindi ho incollato la definizione di' data', e 'json.dumps (data)' ha funzionato bene. –

risposta

30

Questo accade perché si sta passando un oggetto bytes nel data dict (b'1', in particolare), probabilmente come il valore di index. È necessario decodificare a un oggetto prima di strjson.dumps in grado di lavorare con essa:

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"} 
} 
+0

Penso che tu abbia ragione, purtroppo, ho lasciato il mio posto di lavoro e non posso verificarlo fino a domani. Tornerò con una risposta, grazie mille! – Teodora