2010-02-25 23 views
19

के साथ जेएसओएन को डीकोड करने के लिए कैसे करें, मुझे अपना JSON reddit.com से प्राप्त हो रहा है, अनिवार्य रूप से something like this. मैंने काफी कुछ पढ़ा है, लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि मैं इस JSON से जो जानकारी चाहता हूं उसे कैसे प्राप्त कर सकता हूं (मुझे कहानी लिंक की एक सूची चाहिए)। मैं समझता हूं कि मैं JSON को एक शब्दकोश में "डीकोड" कर सकता हूं, लेकिन मुझे जो चाहिए उसे प्राप्त करने के लिए मुझे JSON भर में दोबारा दोबारा करने की ज़रूरत है?पाइथन

अग्रिम धन्यवाद।

+0

जब आप पाइथन और जेएसओएन गुगल करते हैं, तो आपको क्या मिला? क्या आपने "पायथन लाइब्रेरी जेएसओएन" कोशिश की? तुमने क्या देखा? –

+34

जब मैंने पायथन डीकोड जेसन को गुगल किया तो मुझे यह पोस्ट मिला .... – Grummle

उत्तर

23

यदि आप पाइथन 2.6 या बाद में उपयोग कर रहे हैं, तो अंतर्निहित json लाइब्रेरी का उपयोग करें। अन्यथा, simplejson का उपयोग करें जिसमें बिल्कुल वही इंटरफ़ेस है।

आप इस adaptively अजगर संस्करण अपने आप को जांच किए बिना ही कोड का उपयोग कर जैसे कि निम्न कर सकते हैं,:

try: 
    import json 
except ImportError: 
    import simplejson as json 

फिर, json.loads() या जो कुछ भी रूप में उपयुक्त का उपयोग करें।

+2

ध्यान दें कि एक खुला यूआरएल फ़ाइल जैसी वस्तु देता है, इसलिए 'json.load' शायद उचित कार्य है। –

0

मुझे लगता है कि आप डेटा को एक शब्दकोश में पार्स करेंगे और उसके बाद प्रासंगिक बिट्स निकाल देंगे।

आप का उपयोग कर अजगर में json पार्स कर सकते हैं उचित python library

13
import urllib2 
import json 

u = urllib2.urlopen('http://www.reddit.com/.json') 
print json.load(u) 
u.close() 
0

आप दो तरह से अजगर के साथ "डिकोड" json, के बाद आप इसे dicts और json पुस्तकालय के साथ सूची में पार्स किया है सकते हैं।

सबसे पहले, यह अनुक्रमित द्वारा एक्सेस करते समय, इस तरह:

url_list = [t['entries'][0]['url'] for t in data['windows'][0]['tabs']] 

या, आप अपनी वृक्ष संरचना से अधिक पुनरावृति कर सकते हैं। नीचे दिया गया उदाहरण कार्य सामान्य उद्देश्य नहीं है, यह केवल दिखाता है कि पेड़ को पार्स करते समय आपको JSON के तीन अलग-अलग प्रकार के "नोड्स" पर विचार करने की आवश्यकता है। एक कुंजी का "मान" डेटा हो सकता है, बिना चाब वाले बच्चे नोड्स की एक सूची, या एक ऐसा नियम जो मूल रूप से एक नया JSON ऑब्जेक्ट है। आप अपने नाम, डेटा और आपके जैसे बच्चों के लिए प्रत्येक नोड को नियमित पेड़ के साथ जांचने के माध्यम से नहीं चला सकते हैं।

def depthFirstSearch(self, jsonobj, target, parentKey=None): 
     if isinstance(jsonobj, dict): 
      for key, value in jsonobj.items(): 
       if isinstance(value, (dict, list)): 
        self.depthFirstSearch(value, target, key) 
       else: # "data" node 
        if key == target and parentKey not in self.parentsToExclude: 
         self.results.append(value) 
         self.parents[parentKey] += 1 
     if isinstance(jsonobj, list): 
      for value in jsonobj: 
       #lists don't have keys, pass along key from last dict 
       self.depthFirstSearch(value, target, parentKey)