Python - json bez spacji

154

Właśnie zdałem sobie sprawę, że json.dumps()dodaje spacje w obiekcie JSON

na przykład

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

jak można usunąć spacje, aby JSON był bardziej zwarty i zaoszczędzić bajty do wysłania przez HTTP?

Jak na przykład:

{'duration':'02:55','name':'flower','chg':0}
Daniele B
źródło
3
Python 3.4 rozwiązuje ten Changed in version 3.4: Use (',', ': ') as default if indent is not None. problem
grisaitis

Odpowiedzi:

248
json.dumps(separators=(',', ':'))
donghyun208
źródło
2
Bardzo przydatne w testach doctestów z walidacją json.
andilabs
9
Należy również zauważyć, że indent=0generuje znaki nowej linii, podczas gdy indent=None(domyślnie) nie jest w wersji 2.7. Wszystko jest jasno określone pod adresem: docs.python.org/3/library/json.html#json.dump
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
ujsondomyślnie jest to zrzuty bez białych znaków, ale niestety nie obsługuje separatorssłów kluczowych, więc nie można dodać spacji z powrotem, jeśli jest to pożądane. Jest o wiele szybszy niż wbudowany json!
radtek
Przybyłem tutaj, próbując porównać Django request.bodyz tym, request.dataaby ludzie mogli uznać to za przydatnebytes(json.dumps(request.data, separators=(',', ':')), 'utf-8') == request.body
Matt,
49

W niektórych przypadkach możesz chcieć pozbyć się tylko końcowych białych znaków . Następnie możesz użyć

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

Jest spacja po, :ale nie po ,.

Jest to przydatne do porównywania plików JSON (w kontroli wersji, takiej jak git diff), gdzie niektórzy redaktorzy pozbędą się końcowych białych znaków, ale python json.dump doda je z powrotem.

Uwaga: to nie jest dokładną odpowiedzią na pytanie u góry, ale przyszedłem tutaj, szukając konkretnie tej odpowiedzi. Nie sądzę, że zasługuje na własną kontrolę jakości, więc dodam ją tutaj.

Hugues Fontenelle
źródło