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
грисаїт

Відповіді:


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

2
Дуже корисно для doctests з json валідацією.
andilabs

9
А також зауважте, що indent=0генерує нові рядки, тоді як indent=None(за замовчуванням) це не в 2.7. Все чітко сказано на: docs.python.org/3/library/json.html#json.dump
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

ujsonза замовчуванням для смітників без пробілів, але, на жаль, він не підтримує separatorsключове слово, тому не може додати простір назад при бажанні. Це набагато швидше, хоча і вбудований json!
radtek

Я приїхав сюди, намагаючись порівняти Джанго request.bodyз request.dataтим, що людям може бути кориснимbytes(json.dumps(request.data, separators=(',', ':')), 'utf-8') == request.body
Метт

49

У деяких випадках ви можете позбутися лише залишків пробілів . Потім можна використовувати

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

Простір є після, :але не після ,.

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

Примітка. Це не зовсім відповідає на запитання, але я прийшов сюди, шукаючи цю відповідь. Я не думаю, що він заслуговує на власний контроль якості, тому я додаю його сюди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.