요청 라이브러리에서 JSON 응답을 구문 분석하는 가장 좋은 방법은 무엇입니까?


266

파이썬 requests모듈 을 사용하여 RESTful GET을 서버로 보내 JSON에 대한 응답을 얻습니다. JSON 응답은 기본적으로 목록 목록 일뿐입니다.

네이티브 파이썬 객체에 대한 응답을 강요하여 반복하거나 인쇄하여 인쇄 할 수있는 가장 좋은 방법은 무엇입니까 pprint?

답변:


306

당신은 사용할 수 있습니다 json.loads:

import json
import requests

response = requests.get(...)
json_data = json.loads(response.text)

이를 통해 주어진 문자열을 코드로 쉽게 JSON 데이터에 액세스 할 수있는 사전으로 변환합니다.

또는 @Martijn의 유용한 제안 및 더 높은 투표 답변을 사용할 수 있습니다 response.json().


3
좋습니다, 그러나 각 요소는 여전히 유니 코드입니다.
felix001 2016 년

@ felix001 : 예.하지만을 사용하여 모든 데이터를 변환 할 수 있습니다 str(). 다른 한편으로, 유니 코드 데이터는 (미래에 대비하여) 가지고있는 것이 나쁘지 않습니다.
Simeon Visser 2016 년

162
사용 된 인코딩을 파악하는 데 더 나은 작업response.json()수행하므로 훨씬 사용하는 것이 훨씬 좋습니다 . (면책 조항, 그 코드 중 일부를 썼습니다).
Martijn Pieters

@MartijnPieters : 나중에 memcached 응답 텍스트에서 요청 json 파서를 어떻게 사용할 수 있습니까? 즉 response.text()?
neurino

@MartijnPieters, 발견 :requests.compat.json.loads(resp_text)
neurino

469

requests사용하고 있으므로 응답 json방법을 사용해야합니다 .

import requests

response = requests.get(...)
data = response.json()

그것은 사용하는 디코더를 자동 감지 .


2
예를 들어 파이썬 요청에 대한 우분투 12.04 deb-package에는 아직이 기능이 없습니다 (v0.8). pip install requestsdeb 패키지 대신에 사용할 수 있습니다 .
timurb

5
나는 지금 data목록이나 사전 목록 인지 궁금합니다 .
Krishna Oza

6
@Krishna_Oza data는 읽고있는 JSON의 구조를 반영합니다. 예를 들어, 응답이 다음 [{"a": {...}}]과 같은 경우 data는입니다 list[0] == {'a': {...}}. 응답이 {"a": "b", "c": "d"}이면 datadict입니다. 그 질문에 대답합니까?
pswaminathan

1
@CGFoX 어떤 버전을 실행하고 있습니까? 여전히 최신 버전에서 API가 동일한 방식으로 작동하는 것을보고 있습니다.>>> import requests >>> r = requests.get('http://httpbin.org/get') >>> r.json <bound method Response.json of <Response [200]>> >>> r.json() {'args': {}, ...}
pswaminathan

4
큰 json에서 respons.json ()을 사용하는 것이 다른 방법보다 훨씬 빠르다는 것을 알 때까지 일반적으로 json.loads (response.text) 메소드를 사용하고 있었기 때문에 이에 대한 찬성.
Paul R.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.