2014-06-23 5 views
21

मैं जेएसओएन के रूप में एक POST अनुरोध भेजने की कोशिश कर रहा हूं।टाइप एरर: बी'ए 1 जेएसओएन सीरियलज़ेबल नहीं है

* ईमेल वैरिएबल प्रकार का है "बाइट"

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 

मैं त्रुटि मिलती है:

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 

आप मुझे बता सकते क्या यह है कि मैं गलत कर रहा हूँ है?

+0

आप हमें कुछ हम पुन: पेश कर सकते हैं दे सकते हैं? मैंने 'ईमेल' में 'हैलो' 'और' इंडेक्स 'में '0' रखा, फिर' डेटा' की परिभाषा को कॉपी-पेस्ट किया, और 'json.dumps (डेटा)' ठीक काम किया। –

उत्तर

30

इसका कारण यह है कि आप data dict में एक bytes वस्तु गुजर रहे हैं (b'1', विशेष रूप से) हो रहा है, शायद index के मूल्य के रूप में। आप इसके साथ काम कर सकते हैं json.dumps से पहले एक str वस्तु को यह डिकोड करने के लिए की जरूरत है:

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

मुझे लगता है कि आप सही हैं, दुर्भाग्य से, मैंने अपना कार्यस्थल छोड़ा है और मैं इसे कल तक जांच नहीं सकता। मैं एक जवाब के साथ वापस आऊंगा, बहुत बहुत धन्यवाद! – Teodora

संबंधित मुद्दे