Python - json sin espacios en blanco


154

Me acabo de dar cuenta de que json.dumps() agrega espacios en el objeto JSON

p.ej

{'duration': '02:55', 'name': 'flower', 'chg': 0}

¿Cómo puede eliminar los espacios para hacer que el JSON sea más compacto y guardar los bytes que se enviarán a través de HTTP?

como:

{'duration':'02:55','name':'flower','chg':0}

3
Python 3.4 corrige esto: Changed in version 3.4: Use (',', ': ') as default if indent is not None. docs.python.org/3/library/json.html#json.dump
grisaitis

Respuestas:


248
json.dumps(separators=(',', ':'))

2
Muy útil para doctests con validación json.
andilabs

9
Y también tenga en cuenta que indent=0genera nuevas líneas, mientras que indent=None(por defecto) no lo hace en 2.7. Todo se indica claramente en: docs.python.org/3/library/json.html#json.dump
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

ujsonel valor predeterminado es volcados sin espacios en blanco, pero lamentablemente no admite separatorspalabras clave, por lo que no puede volver a agregar espacio si lo desea. Sin embargo, es mucho más rápido que integrado json.
radtek

Llegué aquí tratando de comparar el Django request.bodycon el request.datapara que la gente pueda encontrar esto útilbytes(json.dumps(request.data, separators=(',', ':')), 'utf-8') == request.body
Matt

49

En algunos casos, es posible que desee deshacerse de los espacios en blanco finales solamente. Entonces puedes usar

json.dumps(separators=(',', ': '))

Hay un espacio después :pero no después, .

Esto es útil para diferenciar sus archivos JSON (en el control de versiones como git diff ), donde algunos editores eliminarán el espacio en blanco al final pero python json.dump lo agregará nuevamente.

Nota: Esto no responde exactamente la pregunta en la parte superior, pero vine aquí buscando esta respuesta específicamente. No creo que merezca su propio control de calidad, así que lo estoy agregando aquí.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.