2012-12-17 15 views
71

से JSON प्रतिक्रिया प्राप्त करें मैं पाइथन का उपयोग कर एक यूआरएल प्राप्त करने की कोशिश कर रहा हूं और प्रतिक्रिया JSON है। हालांकि, जब मैंपायथन urllib2: यूआरएल

import urllib2 
response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX') 
html=response.read() 
print html 

HTML प्रकार प्रकार str है और मैं JSON की अपेक्षा कर रहा हूं। क्या कोई तरीका है कि मैं जेएसओएन या स्ट्रिंग के बजाय एक पायथन शब्दकोश के रूप में प्रतिक्रिया को कैप्चर कर सकता हूं।

+0

'response.read()' एक मान्य JSON स्ट्रिंग लौटने है? –

+0

हां यह एक वैध JSON स्ट्रिंग है जो सिर्फ या टाइप स्ट्र है और –

+0

नहीं है यदि यह किसी ऑब्जेक्ट (dict) के JSON प्रस्तुति के बजाय स्ट्रिंग का JSON प्रतिनिधित्व है, तो आप सर्वर को अलग-अलग डेटा वापस करने के लिए मजबूर नहीं कर सकते हैं; आपको शायद एक अलग अनुरोध करने की आवश्यकता है। यदि यह सिर्फ इतना है कि आप नहीं जानते कि समकक्ष पायथन ऑब्जेक्ट में JSON प्रतिनिधित्व को कैसे पार्स किया जाए, तो मार्टजिन पीटर का जवाब सही है। – abarnert

उत्तर

157

हैं, json library का उपयोग करने वाले को डिकोड करने के:

import urllib2 
import json 

response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX') 
data = json.load(response) 
print data 
4

सत्यापन और आदि के बारे में सावधान रहें, लेकिन सीधे समाधान यह है: यूआरएल मान्य JSON एन्कोड डेटा लौटने

import json 
the_dict = json.load(response) 
29
import json 
import urllib 

url = 'http://example.com/file.json' 
r = urllib.request.urlopen(url) 
data = json.loads(r.read().decode(r.info().get_param('charset') or 'utf-8')) 
print data 

urllib, अजगर 3.4
HTTPMessage, r.info द्वारा वापस लिए()

1
resource_url = 'http://localhost:8080/service/' 
response = json.loads(urllib2.urlopen(resource_url).read()) 
0

यहां पर उपलब्ध कराए गए उदाहरणों में से कोई भी मेरे लिए काम नहीं करता है। वे या तो पाइथन 2 (uurllib2) के लिए थे या पाइथन 3 के लिए त्रुटि "आयात त्रुटि: कोई मॉड्यूल नाम अनुरोध नहीं किया गया"। मैं त्रुटि संदेश गूगल करता हूं और जाहिर है कि मुझे मॉड्यूल स्थापित करने की आवश्यकता है - जो कि इस तरह के एक साधारण कार्य के लिए स्पष्ट रूप से अस्वीकार्य है।

इस कोड मेरे लिए काम किया:

import json,urllib 
data = urllib.urlopen("https://api.github.com/users?since=0").read() 
d = json.loads(data) 
print (d) 
+1

आप स्पष्ट रूप से पायथन 2 का उपयोग कर रहे हैं। पायथन 3 में, कोई 'urllib.urlopen' नहीं है; 'urlopen'' urllib.request' मॉड्यूल में है। – Kundor

0

हालांकि मुझे लगता है कि यह पहले से ही उत्तर दिया है मैं में इस

import json 
import urllib2 
class Website(object): 
    def __init__(self,name): 
     self.name = name 
    def dump(self): 
    self.data= urllib2.urlopen(self.name) 
    return self.data 

    def convJSON(self): 
     data= json.load(self.dump()) 
    print data 

domain = Website("https://example.com") 
domain.convJSON() 

नोट मेरी छोटा सा जोड़ना चाहते हैं: वस्तु json.load के लिए पारित()का समर्थन करना चाहिए .read(), इसलिए urllib2.urlopen (self.name) .read() काम नहीं करेगा। Doamin इस मामले http में प्रोटोकॉल के साथ प्रदान की जानी चाहिए पारित

2
""" 
Return JSON to webpage 
Adding to wonderful answer by @Sanal 
For Django 3.4 
Adding a working url that returns a json (Source: http://www.jsontest.com/#echo) 
""" 

import json 
import urllib 

url = 'http://echo.jsontest.com/insert-key-here/insert-value-here/key/value' 
respons = urllib.request.urlopen(url) 
data = json.loads(respons.read().decode(respons.info().get_param('charset') or 'utf-8')) 
return HttpResponse(json.dumps(data), content_type="application/json") 
+1

आपने मुझे नरक एन्कोडिंग से बचाया है - धन्यवाद: डी – Garbit

+1

whew, कि json.dumps() ने मेरा दिन बचाया। – Lloyd

+0

Django 1.7 + के मामले में, आप सीधे jsonResponse का उपयोग कर सकते हैं 'django.http आयात से JsonResponse वापसी JsonResponse ({'key': 'value'})' – raccoon

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