Python - JSON без пробелов

154

Я только что понял, что json.dumps()добавляет пробелы в объекте JSON

например

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

Как удалить пробелы, чтобы сделать JSON более компактным и сохранить байты для отправки по HTTP?

Такие как:

{'duration':'02:55','name':'flower','chg':0}
Даниэль Б
источник
3
Python 3.4 исправляет это: Changed in version 3.4: Use (',', ': ') as default if indent is not None. docs.python.org/3/library/json.html#json.dump
grisaitis

Ответы:

249
json.dumps(separators=(',', ':'))
donghyun208
источник
2
Очень полезно для doctests с проверкой JSON.
Andilabs
9
А также обратите внимание, что indent=0генерирует новые строки, а indent=None(по умолчанию) нет в 2.7. Все четко изложено по адресу: docs.python.org/3/library/json.html#json.dump
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
ujsonпо умолчанию это дампы без пробелов, но, к сожалению, он не поддерживает separatorsключевое слово, поэтому не может добавить пробел обратно, если это необходимо. Это намного быстрее, хотя против встроенного json!
Радтек
Я приехал сюда, пытаясь сравнить Django request.bodyс тем, request.dataчто люди могут найти это полезнымbytes(json.dumps(request.data, separators=(',', ':')), 'utf-8') == request.body
Мэтт
49

В некоторых случаях вы можете захотеть избавиться только от конечных пробелов . Вы можете использовать

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

Есть место после, :но не после ,.

Это полезно для сравнения ваших файлов JSON (в управлении версиями, например git diff), где некоторые редакторы избавятся от конечного пробела, но python json.dump добавит его обратно.

Примечание: это не совсем отвечает на вопрос сверху, но я пришел сюда, чтобы найти этот ответ специально. Я не думаю, что он заслуживает своего собственного контроля качества, поэтому я добавляю его сюда.

Hugues Fontenelle
источник