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}
Daniele B
fuente
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=(',', ':'))
donghyun208
fuente
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í.

Hugues Fontenelle
fuente