[python] TypeError : JSON 객체는 ‘바이트’가 아닌 str이어야합니다.

다음과 같은 매우 기본적인 코드가 있습니다. 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) 및 응답 인코딩을 확인하여 콘텐츠를 올바르게 디코딩하는 방법을 자동 감지합니다.


답변

python3.6 +는이 작업을 자동으로 수행하므로 코드가 python3.6 +에서 오류를 반환하지 않아야합니다.

python3.6의 새로운 기능


답변