Solo voy a agregar un ejemplo simple a lo que todos han explicado,
json.load ()
json.load
puede deserializar un archivo en sí mismo, es decir, acepta un file
objeto, por ejemplo,
# 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))
dará salida,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Si uso json.loads
para abrir un archivo en su lugar,
# you cannot use json.loads on file object
with open("json_data.json", "r") as content:
print(json.loads(content))
Me daría este error:
TypeError: cadena esperada o buffer
json.loads ()
json.loads()
deserializar cadena.
Entonces, para usarlo json.loads
, tendré que pasar el contenido del archivo usandoread()
función, por ejemplo,
utilizando content.read()
con el json.loads()
contenido de retorno del archivo,
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
Salida,
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Eso es porque tipo de content.read()
es una cadena, es decir<type 'str'>
Si uso json.load()
con content.read()
, obtendré un error,
with open("json_data.json", "r") as content:
print(json.load(content.read()))
Da,
AttributeError: el objeto 'str' no tiene el atributo 'read'
Entonces, ahora sabes el json.load
archivo deserialze yjson.loads
deserializar una cadena.
Otro ejemplo,
sys.stdin
devolver file
objeto, así que si lo hago print(json.load(sys.stdin))
, obtendré datos json reales,
cat json_data.json | ./test.py
{u'event': {u'id': u'5206c7e2-da67-42da-9341-6ea403c632c7', u'name': u'Sufiyan Ghori'}}
Si quiero usar json.loads()
, lo haría en su print(json.loads(sys.stdin.read()))
lugar.
json.loads(s, *)
- Deserializes
(astr
,bytes
obytearray
ejemplo que contiene un documento JSON) - docs.python.org/3.6/library/json.html