Solución:
Sí, s
significa cuerda. los json.loads
La función no toma la ruta del archivo, sino el contenido del archivo como una cadena. ¡Mire la documentación en https://docs.python.org/2/library/json.html!
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))
saldrá,
{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))
Obtendría este error:
TypeError: cadena o búfer esperados
json.loads ()
json.loads()
deserializar cadena.
Entonces, para usar json.loads
Tendré que pasar el contenido del archivo usando read()
función, por ejemplo,
utilizando content.read()
con json.loads()
devolver el contenido del archivo,
with open("json_data.json", "r") as content:
print(json.loads(content.read()))
Producción,
{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 atributo ‘read’
Entonces, ahora lo sabes json.load
deserialze archivo y json.loads
deserializar una cadena.
Otro ejemplo,
sys.stdin
regreso 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()
, Yo lo haría print(json.loads(sys.stdin.read()))
en lugar de.
La documentación es bastante clara: https://docs.python.org/2/library/json.html
json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
Deserialize fp (un .read () – objeto de soporte similar a un archivo que contiene un documento JSON) a un objeto Python usando esta tabla de conversión.
json.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])
Deserialize s (una instancia str o unicode que contiene un documento JSON) a un objeto Python usando esta tabla de conversión.
Entonces load
es para un archivo, loads
para string