다음과 같은 매우 기본적인 코드가 있습니다. TypeError: the JSON object must be str, not 'bytes'
import requests
import json
url = 'my url'
user = 'my user'
pwd = 'my password'
response = requests.get(url, auth=(user, pwd))
if(myResponse.ok):
Data = json.loads(myResponse.content)
다음과 같이 Decode를 Data 변수에 설정하려고하지만 동일한 오류가 발생합니다. jData = json.loads(myResponse.content).decode('utf-8')
어떤 제안?
답변
json.loads(myResponse.content.decode('utf-8'))
당신은 그것을 잘못된 순서로 넣었습니다.
(심층 답변). wim이 정중하게 지적했듯이 드물게 UTF-16 또는 UTF-32를 선택할 수 있습니다. 이러한 경우는 개발자로서 덜 일반적이며,이 시나리오에서는 귀중한 대역폭을 버리기로 의식적으로 결정할 것입니다. 따라서 인코딩 문제가 발생하면 utf-8을 16, 32 등으로 변경할 수 있습니다.
이에 대한 몇 가지 해결책이 있습니다. 요청의 내장 .json()
기능을 사용할 수 있습니다 .
myResponse.json()
또는을 통해 문자 감지를 선택할 수 있습니다 chardet
. Chardet은 연구를 기반으로 개발 된 라이브러리입니다. 라이브러리에는 detect
. Detect는 가장 일반적인 인코딩을 감지 한 다음이를 사용하여 문자열을 인코딩 할 수 있습니다.
import chardet
json.loads(myResponse.content.decode(chardet.detect(myResponse.content)["encoding"]))
답변
요청이이를 디코딩하도록합니다.
data = response.json()
헤더 (Content-Type) 및 응답 인코딩을 확인하여 콘텐츠를 올바르게 디코딩하는 방법을 자동 감지합니다.