En Python, ¿cuál es la diferencia entre json.load()
y json.loads()
?
Supongo que la carga () la función se debe utilizar con un objeto de archivo (Necesito por lo tanto utilizar un gestor de contexto), mientras que las () cargas de función toman la ruta del archivo como una cadena. Es un poco confuso.
¿La letra " s " enjson.loads()
significa cadena ?
¡Muchas gracias por sus respuestas!
python
json
python-2.7
MMF
fuente
fuente
json.loads(s, *)
- Deserializes
(astr
,bytes
obytearray
ejemplo que contiene un documento JSON) - docs.python.org/3.6/library/json.htmlRespuestas:
Sí,
s
significa cuerda. Lajson.loads
función no toma la ruta del archivo, sino el contenido del archivo como una cadena. ¡Mira la documentación en https://docs.python.org/2/library/json.html !fuente
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 unfile
objeto, por ejemplo,dará salida,
Si uso
json.loads
para abrir un archivo en su lugar,Me daría este error:
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 eljson.loads()
contenido de retorno del archivo,Salida,
Eso es porque tipo de
content.read()
es una cadena, es decir<type 'str'>
Si uso
json.load()
concontent.read()
, obtendré un error,Da,
Entonces, ahora sabes el
json.load
archivo deserialze yjson.loads
deserializar una cadena.Otro ejemplo,
sys.stdin
devolverfile
objeto, así que si lo hagoprint(json.load(sys.stdin))
, obtendré datos json reales,Si quiero usar
json.loads()
, lo haría en suprint(json.loads(sys.stdin.read()))
lugar.fuente
with open()
yjson.loads()
devuelve una excepción:TypeError: the JSON object must be str, bytes or bytearray, not 'TextIOWrapper'
La documentación es bastante clara: https://docs.python.org/2/library/json.html
Así
load
es para un archivo,loads
para unstring
fuente
RESPUESTA RÁPIDA (¡muy simplificado!)
EJEMPLOS
fuente
json.dump
/dumps
&json.load
/loads
bogotobogo.com/python/…El método json.load () (sin "s" en "load") puede leer un archivo directamente:
Método json.loads () , que se usa solo para argumentos de cadena .
Aquí, podemos ver que después de usar cargas () toma una cadena (tipo (cadena)) como un diccionario de entrada y retorno .
fuente
En python3.7.7, la definición de json.load es la siguiente según el código fuente de cpython :
json.load en realidad llama a json.loads y se usa
fp.read()
como primer argumento.Entonces, si su código es:
Es lo mismo hacer esto:
Pero si necesita especificar la lectura de bytes del archivo como like
fp.read(10)
o la cadena / bytes que desea deserializar no es del archivo, debe usar json.loads ()En cuanto a json.loads (), no solo deserializa la cadena sino también los bytes. Si
s
es bytes o bytearray, primero se decodificará en cadena. También puedes encontrarlo en el código fuente.fuente