Apenas adicionando um exemplo simples ao que todos explicaram,
json.load ()
json.loadpode desserializar um arquivo em si, ou seja, ele aceita um fileobjeto, 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.loadspara 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.loaddesserializar o arquivo e json.loadsdesserializar uma string.
Outro exemplo,
sys.stdinretornar fileobjeto, 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,bytesoubytearrayinstância que contém um documento JSON) - docs.python.org/3.6/library/json.html