TypeError: JSON ऑब्जेक्ट को स्ट्रिंग होना चाहिए, 'बाइट्स' नहीं


81

मेरे पास निम्नलिखित, बहुत बुनियादी कोड है जो फेंकता है; TypeError: the JSON object must be str, not 'bytes'

import requests
import json

url = 'my url'
user = 'my user'
pwd = 'my password'

response = requests.get(url, auth=(user, pwd))

if(myResponse.ok):
    Data = json.loads(myResponse.content)

मैं डेटा चर को डीकोड सेट करने की कोशिश करता हूं, जो निम्नानुसार है लेकिन यह उसी त्रुटि को फेंकता है; jData = json.loads(myResponse.content).decode('utf-8')

कोई सुझाव?


जवाबों:


139
json.loads(myResponse.content.decode('utf-8'))

आपने इसे गलत आदेश, निर्दोष गलती में डाल दिया।


(गहराई से जवाब)। जैसा कि विनम्रता से बताया गया है, कुछ दुर्लभ मामलों में, वे UTF-16 या UTF-32 का विकल्प चुन सकते हैं। ये मामले डेवलपर्स के रूप में कम सामान्य होंगे, इस परिदृश्य में जानबूझकर मूल्यवान बैंडविड्थ को फेंकने का निर्णय लिया जाएगा। इसलिए, यदि आप एन्कोडिंग मुद्दों में भाग लेते हैं, तो आप utf-8 को 16, 32, आदि में बदल सकते हैं।

इसके लिए कुछ उपाय हैं। आप अनुरोध के अंतर्निहित .json()फ़ंक्शन का उपयोग कर सकते हैं :

myResponse.json()

या, आप के माध्यम से चरित्र का पता लगाने के लिए विकल्प चुन सकते हैं chardet। चारडेट एक अध्ययन के आधार पर विकसित पुस्तकालय है। पुस्तकालय का एक कार्य है detect:। डिटेक्ट सबसे आम एनकोडिंग का पता लगा सकता है और फिर उन्हें अपनी स्ट्रिंग को एनकोड करने के लिए उपयोग कर सकता है।

import chardet
json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))

31

अनुरोधों को आपके लिए डिकोड करें:

data = response.json()

यह हेडर (सामग्री-प्रकार) और प्रतिक्रिया एन्कोडिंग, ऑटो-डिटेक्शन की जांच करेगा कि सामग्री को सही तरीके से कैसे डिकोड किया जाए।


1
मैं आपकी विधि की कोशिश कर रहा हूं, लेकिन मुझे त्रुटि हो रही है: 'InMemoryUploadedFile' ऑब्जेक्ट में कोई विशेषता 'json' नहीं है, यह अनुरोध से है। फाइल्स ['file']। json ()
Manza

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.