Python - boşluksuz json


166

json.dumps()JSON nesnesine boşluklar eklediğini fark ettim

Örneğin

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

JSON'u daha kompakt hale getirmek ve baytları HTTP yoluyla gönderilmek üzere kaydetmek için boşlukları nasıl kaldırabilirim?

gibi:

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

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

Yanıtlar:


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

2
Json doğrulamalı doctestleri için çok kullanışlıdır.
andilabs

9
Ayrıca indent=0, yeni satırlar oluştururken indent=None(varsayılan) 2.7'de değil. Her şey açıkça şu adreste
Ciro Santilli 郝海东 冠状 病 六四 法轮功 法轮功

ujsonvarsayılan olarak boşluksuz dökümler olarak kullanılır, ancak ne yazık ki separatorsanahtar kelimeyi desteklemiyor, bu nedenle istenirse tekrar boşluk ekleyemezsiniz. Yerleşik ile karşılaştırıldığında çok daha hızlıdır json!
radtek

Django karşılaştırmaya çalışıyor geldi request.bodyiçin request.databu konuda yararlı olabilecek, böylece milletbytes(json.dumps(request.data, separators=(',', ':')), 'utf-8') == request.body
Mat

52

Bazı durumlarda, yalnızca sondaki beyaz boşluklardan kurtulmak isteyebilirsiniz . Daha sonra kullanabilirsiniz

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

Sonrasında bir boşluk var, sonra :değil ,.

Bu, JSON dosyalarınızın (sürüm kontrolünde olduğu gibi git diff) farklılaştırılması için kullanışlıdır , burada bazı editörler sondaki beyaz boşluktan kurtulacak, ancak python json.dump onu geri ekleyecektir.

Not: Bu, üstteki soruyu tam olarak yanıtlamıyor, ancak buraya özellikle bu yanıtı aramaya geldim. Kendi QA'sını hak ettiğini düşünmüyorum, bu yüzden buraya ekliyorum.


0

Kompakt kodlama:

import json

list_1 = [1, 2, 3, {'4': 5, '6': 7}]

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

print(list_1)
[1,2,3,{"4":5,"6":7}]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.