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.