2014-06-23 17 views
21

Tôi đang cố gửi yêu cầu POST dưới dạng JSON.LoạiError: b'1 'không phải là JSON serializable

* biến email là loại "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 

tôi nhận được lỗi:

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 

Ông có thể vui lòng cho tôi là những gì nó mà tôi đang làm sai?

+0

Bạn có thể cho chúng tôi thứ gì đó mà chúng tôi có thể tái tạo không? Tôi đặt '" Hello "' trong 'email' và' 0' trong 'index', sau đó copy-paste định nghĩa' data', và 'json.dumps (data)' hoạt động tốt. –

Trả lời

30

này đang xảy ra bởi vì bạn đang đi qua một đối tượng bytes trong data dict (b'1', cụ thể), có lẽ là giá trị của index. Bạn cần giải mã đối tượng str trước json.dumps có thể làm việc với nó:

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

Tôi nghĩ bạn đúng, thật không may, tôi đã rời nơi làm việc của mình và tôi không thể kiểm tra điều này cho đến ngày mai. Tôi sẽ quay lại với một câu trả lời, cảm ơn bạn rất nhiều! – Teodora

Các vấn đề liên quan