Saltar al contenido

¿Cuál es la diferencia entre las funciones json.load () y json.loads ()?

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

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *