본문 바로가기
파이썬

파이썬 urllib.request 및 json 모듈을 사용하여 Python에서 JSON 객체로드

by º기록 2020. 11. 18.
반응형

간단한 Python 스크립트 테스트에서 'json'및 'urllib.request'모듈을 함께 작동시키는 데 문제가 있습니다. Python 3.5를 사용하고 여기에 코드가 있습니다.

import json
import urllib.request

urlData = "http://api.openweathermap.org/data/2.5/weather?q=Boras,SE"
webURL = urllib.request.urlopen(urlData)
print(webURL.read())
JSON_object = json.loads(webURL.read()) #this is the line that doesn't work

명령 줄을 통해 스크립트를 실행할 때 " TypeError : the JSON object must be str, not 'bytes'"오류가 발생합니다. 저는 Python을 처음 사용하므로 매우 쉬운 해결책이 있습니다. 여기에서 도움을 주셔서 감사합니다.

 

해결 방법

 

디코딩하는 것을 잊는 것 외에도 응답을 한 번 읽을 수 있습니다. 이미 .read () 를 호출 했으므로 두 번째 호출은 빈 문자열을 반환합니다.

.read () 를 한 번만 호출하고 데이터를 문자열로 디코딩 합니다.

data = webURL.read()
print(data)
encoding = webURL.info().get_content_charset('utf-8')
JSON_object = json.loads(data.decode(encoding))


데모:

>>> import json
>>> import urllib.request
>>> urlData = "http://api.openweathermap.org/data/2.5/weather?q=Boras,SE"
>>> webURL = urllib.request.urlopen(urlData)
>>> data = webURL.read()
>>> encoding = webURL.info().get_content_charset('utf-8')
>>> json.loads(data.decode(encoding))
{'coord': {'lat': 57.72, 'lon': 12.94}, 'visibility': 10000, 'name': 'Boras', 'main': {'pressure': 1021, 'humidity': 71, 'temp_min': 285.15, 'temp': 286.39, 'temp_max': 288.15}, 'id': 2720501, 'weather': [{'id': 802, 'description': 'scattered clouds', 'icon': '03d', 'main': 'Clouds'}], 'wind': {'speed': 5.1, 'deg': 260}, 'sys': {'type': 1, 'country': 'SE', 'sunrise': 1443243685, 'id': 5384, 'message': 0.0132, 'sunset': 1443286590}, 'dt': 1443257400, 'cod': 200, 'base': 'stations', 'clouds': {'all': 40}}

 

참조 페이지 https://stackoverflow.com/questions/32795460

 

 

반응형

댓글