दिलचस्प पोस्ट
Express.js में 'अगले / अगले ()' को समझने की कोशिश करने के लिए एक कठिन समय आ रहा है JUnit भ्रम: उपयोग 'TestCase' या '@Test' फैली? गणित। मैदान (संख्या) बनाम num.toFixed (0) और ब्राउज़र विसंगतियां एक plpgsql फ़ंक्शन में तालिका और स्तंभ नामों को तर्क के रूप में परिभाषित करें? PHP के माध्यम से रूट कमांड निष्पादित करें एक गैर-प्रशासक उपयोगकर्ता खाते से एक Windows सेवा को प्रारंभ / बंद करें सूची दृश्य सूची को अद्यतन करने के बाद सूची के अंत तक स्क्रॉल करें क्या IE8 आउट-ऑफ़-बॉक्स को 'स्थानीय स्टॉरेज' के लिए समर्थन मिलता है क्यों प्रतिक्रिया। रीडायरेक्ट सिस्टम का कारण होता है। थ्रेडिंग। थ्रेड एडोबेशन? अनाम तरीकों (सी # 2.0) और लैम्ब्डा भाव (सी # 3.0) के बीच अंतर क्या है? पहले से ही एक खुले डेटारडर जो इस कमान से जुड़ा हुआ है, जिसे पहले बंद होना चाहिए क्या एंड्रॉइड में एप्लिकेशन आइकन पर बैज जोड़ने का कोई तरीका है? LINQ का उपयोग करके एक सूची <स्ट्रिंग> के अंदर सभी स्ट्रिंग्स को सचेत करें एकाधिक असाइनमेंट सिमेंटिक jQuery। भविष्य के तत्वों के लिए फ़ंक्शन के रूप में .live को बहिष्कृत किया गया है

पायथन 3, json ऑब्जेक्ट बाइट स्वीकार या urlopen आउटपुट स्ट्रिंग दें

पायथन 3 के साथ मैं कुछ यूआरएल से जेसन दस्तावेज़ का अनुरोध कर रहा हूं।

response = urllib.request.urlopen(request) 

response ऑब्जेक्ट ऑब्जेक्ट की तरह फाइल है, रीडलाइन फ़ंक्शंस।

आम तौर पर एक जेसन ऑब्जेक्ट एक फाइल के साथ बनाया जा सकता है (टेक्स्टमेड में खोला गया)

 obj = json.load(fp) 

मैं क्या करना चाहूंगा:

 obj = json.load(response) 

यह हालांकि काम नहीं करता क्योंकि urlopen फाइल ऑब्जेक्ट को बायनेरी मोड में देता है।

एक काम लगभग बिल्कुल है:

 str_response = response.readall().decode('utf-8') obj = json.loads(str_response) 

लेकिन यह बुरा लगता है …

क्या कोई बेहतर तरीका है कि मैं एक बाइट फ़ाइल ऑब्जेक्ट को स्ट्रिंग फाइल ऑब्जेक्ट में बदल सकता हूं? या क्या मैं एक एन्कोडिंग देने के लिए json.load या json.load किसी भी पैरामीटर को याद कर रहा हूं?

यह मुझे आम उपयोग के मामले के रूप में देखना होगा, इसलिए मुझे विश्वास है कि मुझे कुछ उपयोगी फ़ंक्शन याद आ रही है।

वेब के समाधान से एकत्रित समाधान "पायथन 3, json ऑब्जेक्ट बाइट स्वीकार या urlopen आउटपुट स्ट्रिंग दें"

HTTP बाइट भेजता है यदि सवाल में संसाधन पाठ है, तो चरित्र एन्कोडिंग सामान्य रूप से निर्दिष्ट किया जाता है, या तो सामग्री-प्रकार HTTP हेडर द्वारा या किसी अन्य तंत्र द्वारा (एक आरएफसी, एचटीएमएल meta http-equiv , …)।

urllib को पता होना चाहिए कि बाइट को स्ट्रिंग में कैसे एन्कोड करना है, लेकिन यह बहुत भोली-यह एक बुरी तरह से अंडरपावर और अन-पायथनिक लाइब्रेरी है।

पायथन 3 में डुवें स्थिति के बारे में एक सिंहावलोकन प्रदान करता है।

आपका "काम-थ्रू" ठीक है- हालांकि यह गलत लगता है, ऐसा करने का सही तरीका है

बचाव के लिए अजगर की अद्भुत मानक पुस्तकालय …

 import codecs reader = codecs.getreader("utf-8") obj = json.load(reader(response)) 

दोनों py2 और py3 के साथ काम करता है

मुझे लगता है कि सवाल सबसे अच्छा जवाब है आ गया है 🙂

 import json from urllib.request import urlopen response = urlopen("site.com/api/foo/bar").read().decode('utf8') obj = json.loads(response) 

requests लाइब्रेरी का उपयोग करके इसे हल करने की कोशिश करने वाले किसी अन्य व्यक्ति के लिए:

 import json import requests r = requests.get('http://localhost/index.json') r.raise_for_status() # works for Python2 and Python3 json.loads(r.content.decode('utf-8')) 

यह मेरे लिए काम करता है, मैंने 'अनुरोध' लाइब्रेरी का इस्तेमाल json() साथ में मनुष्य के लिए अनुरोधों में डॉक्टर की जांच

 import requests url = 'here goes your url' obj = requests.get(url).json() 

बस एचएसटीपीआरपीएसपेज सामग्री को जेएसएन के रूप में बनाने के लिए यह सरल विधि मिली

 import json request = RequestFactory() # ignore this, this just like your request object response = MyView.as_view()(request) # got response as HttpResponse object response.render() # call this so we could call response.content after json_response = json.loads(response.content.decode('utf-8')) print(json_response) # {"your_json_key": "your json value"} 

आशा है कि आप मदद करता है

मैं अजगर 3.4.3 और 3.5.2 और Django 1.11.3 का उपयोग करते हुए इसी तरह की समस्याओं में भाग गया। हालांकि, जब मैं पायथन 3.6.1 में अपग्रेड कर दिया तो समस्याएं दूर चली गईं।

आप इसके बारे में यहां अधिक पढ़ सकते हैं: https://docs.python.org/3/whatsnew/3.6.html#json

यदि आप पायथन के किसी विशिष्ट संस्करण से नहीं जुड़े हैं, तो बस 3.6 या बाद के संस्करण में अपग्रेड करने पर विचार करें।

यदि आप फ्लास्क माइक्रोफ्रेमवर्क का उपयोग करते समय इस समस्या का अनुभव कर रहे हैं, तो आप यह कर सकते हैं:

data = json.loads(response.get_data(as_text=True))

डॉक्स से : "यदि as_text को सही पर सेट किया जाता है तो वापसी मान डीकोड किया गया यूनिकोड स्ट्रिंग होगा"