2010-02-25 6 views
19

reddit.com에서 JSON을 가져옵니다. 본질적으로 something like this. 꽤 많이 읽었지만 실제로이 JSON에서 원하는 정보를 얻을 수있는 방법을 이해하지 못했습니다 (나는 이야기 링크 목록을 원한다.) JSON을 사전으로 "디코딩"할 수 있다는 것을 알고 있지만 필요한 것을 얻기 위해 JSON 전체에서 재귀해야합니까?Python으로 JSON을 디코딩하는 방법

미리 감사드립니다.

+0

당신이봤을 때 파이썬과 JSON, 당신은 무엇을 찾았나요? "Python Library JSON"을 사용해 보셨습니까? 당신은 무엇을 보았는가? –

+34

내가 파이썬 디코딩 json을 찾았을 때 나는이 게시물을 발견했다 .... – Grummle

답변

23

파이썬 2.6 이상을 사용하는 경우 내장형 json 라이브러리를 사용하십시오. 그렇지 않은 경우 정확히 동일한 인터페이스를 가진 simplejson을 사용하십시오.

당신은 다음과 같은 코드를 사용하여, 파이썬 버전을 직접 확인하지 않고 적응이 작업을 수행 할 수 있습니다

try: 
    import json 
except ImportError: 
    import simplejson as json 

그런 다음, 적절한 json.loads() 또는 무엇이든을 사용합니다.

+2

오픈 URL은 파일과 유사한 객체를 제공하므로'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, 후에는 JSON 라이브러리 dicts 및 목록으로 구문 분석 한 할 수있는 두 가지 방법이 있습니다.

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

을 또는, 당신은 트리 구조를 반복 할 수 있습니다

먼저, 다음과 같이 인덱스하여 접근. 아래의 예제 함수는 일반적인 목적이 아니며 트리를 파싱 할 때 JSON의 세 가지 다른 "노드"를 다르게 고려해야한다는 것을 보여줍니다. 키의 "값"은 데이터, 키가없는 자식 노드의 목록 또는 기본적으로 새 JSON 객체 인 dict 일 수 있습니다. 규칙적인 트리를 사용하는 것처럼 모든 노드의 이름, 데이터 및 하위 항목을 검사 할 수는 없습니다.

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) 
관련 문제