Python - json sans espaces

154

Je viens de réaliser que json.dumps()ajoute des espaces dans l'objet JSON

par exemple

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

comment supprimer les espaces afin de rendre le JSON plus compact et économiser les octets à envoyer via HTTP?

tel que:

{'duration':'02:55','name':'flower','chg':0}
Daniele B
la source
3
Python 3.4 corrige ceci: Changed in version 3.4: Use (',', ': ') as default if indent is not None. docs.python.org/3/library/json.html#json.dump
grisaitis

Réponses:

249
json.dumps(separators=(',', ':'))
donghyun208
la source
2
Très utile pour les doctests avec validation json.
andilabs
9
Et notez également que indent=0génère des nouvelles lignes, alors que indent=None(par défaut) ne le fait pas dans 2.7. Tout est clairement indiqué sur: docs.python.org/3/library/json.html#json.dump
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
ujsonpar défaut, les vidages sans espace, mais malheureusement, il ne prend pas en charge les separatorsmots clés et ne peut donc pas ajouter d'espace si vous le souhaitez. C'est beaucoup plus rapide que celui intégré json!
radtek
Je suis arrivé ici en essayant de comparer le Django request.bodyaux request.datagens pour que les gens puissent trouver cela utilebytes(json.dumps(request.data, separators=(',', ':')), 'utf-8') == request.body
Matt
49

Dans certains cas, vous souhaiterez peut-être supprimer uniquement les espaces de fin . Vous pouvez ensuite utiliser

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

Il y a un espace après :mais pas après ,.

Ceci est utile pour différencier vos fichiers JSON (dans le contrôle de version tel que git diff), où certains éditeurs se débarrasseront de l'espace blanc de fin mais python json.dump le rajoutera.

Remarque: cela ne répond pas exactement à la question en haut, mais je suis venu ici à la recherche de cette réponse en particulier. Je ne pense pas qu'il mérite son propre contrôle qualité, alors je l'ajoute ici.

Hugues Fontenelle
la source