Em Python, qual é a diferença entre json.load()
e json.loads()
?
Eu acho que o load () função deve ser usado com um objeto de arquivo (eu preciso, portanto, usar um gerenciador de contexto), enquanto os () cargas função tomar o caminho para o arquivo como uma string. É um pouco confuso.
A letra " s " json.loads()
significa string ?
Muito obrigado por suas respostas!
python
json
python-2.7
MMF
fonte
fonte
json.loads(s, *)
- Desserializars
(astr
,bytes
oubytearray
instância que contém um documento JSON) - docs.python.org/3.6/library/json.htmlRespostas:
Sim,
s
significa string. Ajson.loads
função não pega o caminho do arquivo, mas o conteúdo do arquivo como uma sequência. Veja a documentação em https://docs.python.org/2/library/json.html !fonte
Apenas adicionando um exemplo simples ao que todos explicaram,
json.load ()
json.load
pode desserializar um arquivo em si, ou seja, ele aceita umfile
objeto, por exemplo,irá produzir,
Se eu usar
json.loads
para abrir um arquivo,Eu receberia este erro:
json.loads ()
json.loads()
desserializar string.Portanto, para usar
json.loads
, terei que passar o conteúdo do arquivo usando aread()
função, por exemplo,usando
content.read()
comjson.loads()
conteúdo de retorno do arquivo,Resultado,
Isso
content.read()
ocorre porque type of is string, ou seja<type 'str'>
Se eu usar
json.load()
comcontent.read()
, receberei um erro,Dá,
Então, agora você sabe
json.load
desserializar o arquivo ejson.loads
desserializar uma string.Outro exemplo,
sys.stdin
retornarfile
objeto, então, se eu fizerprint(json.load(sys.stdin))
, vou obter dados json reais,Se eu quiser usar
json.loads()
, eu fariaprint(json.loads(sys.stdin.read()))
.fonte
with open()
ejson.loads()
retorna uma exceção:TypeError: the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'
A documentação é bastante clara: https://docs.python.org/2/library/json.html
O mesmo
load
vale para um arquivo,loads
para umstring
fonte
RESPOSTA RÁPIDA (muito simplificado!)
EXEMPLOS
fonte
json.dump
/dumps
&json.load
/loads
bogotobogo.com/python/…O método json.load () (sem "s" em "load") pode ler um arquivo diretamente:
O método json.loads () , usado apenas para argumentos de string .
Aqui, podemos ver que, após o uso de load (), uma string (type (str)) é usada como dicionário de entrada e retorno .
fonte
No python3.7.7, a definição de json.load é a seguinte, de acordo com o código-fonte cpython :
json.load realmente chama json.loads e usa
fp.read()
como o primeiro argumento.Portanto, se o seu código for:
É o mesmo a fazer isso:
Mas se você precisar especificar os bytes lidos no arquivo como se fossem iguais
fp.read(10)
ou a string / bytes que deseja desserializar não for do arquivo, use json.loads ()Quanto ao json.loads (), ele não apenas desserializa a string, mas também bytes. Se
s
for bytes ou bytearray, ele será decodificado para string primeiro. Você também pode encontrá-lo no código fonte.fonte