Apenas adicionando um exemplo simples ao que todos explicaram,
json.load ()
json.load
pode desserializar um arquivo em si, ou seja, ele aceita um file
objeto, por exemplo,
# open a json file for reading and print content using json.load
with open("/xyz/json_data.json", "r") as content:
print(json.load(content))
irá produzir,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Se eu usar json.loads
para abrir um arquivo,
# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
print(json.loads(content))
Eu receberia este erro:
TypeError: string ou buffer esperado
json.loads ()
json.loads()
desserializar string.
Portanto, para usar json.loads
, terei que passar o conteúdo do arquivo usando a read()
função, por exemplo,
usando content.read()
com json.loads()
conteúdo de retorno do arquivo,
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
Resultado,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Isso content.read()
ocorre porque type of is string, ou seja<type 'str'>
Se eu usar json.load()
com content.read()
, receberei um erro,
with open("json_data.json", "r") as content:
print(json.load(content.read()))
Dá,
AttributeError: o objeto 'str' não tem atributo 'read'
Então, agora você sabe json.load
desserializar o arquivo e json.loads
desserializar uma string.
Outro exemplo,
sys.stdin
retornar file
objeto, então, se eu fizer print(json.load(sys.stdin))
, vou obter dados json reais,
cat json_data.json | ./test.py
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Se eu quiser usar json.loads()
, eu faria print(json.loads(sys.stdin.read()))
.
json.loads(s, *)
- Desserializars
(astr
,bytes
oubytearray
instância que contém um documento JSON) - docs.python.org/3.6/library/json.html