2014-06-23 14 views
21

Próbuję wysłać żądanie POST jako JSON.TypeError: b'1 'nie jest serializowany JSON

email * zmienna jest typu „bajty”

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 

pojawia się błąd:

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 

mógłbyś mi powiedzieć, co to jest, że robię źle?

+0

Czy możesz nam coś możemy odtworzyć? Wpisuję "" Witaj "' w 'e-mail' i' 0' w 'indeksie', a następnie kopiuj-wklejono definicję' danych', a 'json.dumps (dane)' działało dobrze. –

Odpowiedz

30

Dzieje się tak dlatego, że jesteś przechodzącą bytes obiekt w data dict (b'1', w szczególności), prawdopodobnie jako wartość index. Trzeba dekodować go do str obiektu przed json.dumps można z nim pracować:

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

Myślę, że masz rację, niestety, opuściłem swoje miejsce pracy i nie mogę tego sprawdzić do jutra. Wrócę z odpowiedzią, dziękuję bardzo! – Teodora

Powiązane problemy