Mam plik JSON, który jest bałaganem, który chcę wydrukować - jaki jest najłatwiejszy sposób na zrobienie tego w pythonie? Wiem, że PrettyPrint bierze „obiekt”, który moim zdaniem może być plikiem, ale nie wiem, jak przekazać plik - samo użycie nazwy pliku nie działa.
python
json
formatting
pretty-print
Colleen
źródło
źródło
json.loads()
i wydrukować wynikowy słownik. Lub po prostu przejdź do sekcji Ładne drukowanie dokumentacjijson
Python dla .<your_file.js python -mjson.tool
jak w linku @ ed?Odpowiedzi:
json
Moduł już realizuje podstawowe drukowanie ładna zindent
parametrem:Aby przeanalizować plik, użyj
json.load()
:źródło
print json.dumps(your_json_string, indent=4)
print(json.dumps(json.loads(your_json_string), indent=2))
przeciwnym razie pokazał mi tylko ciąg, który uciekłMożesz to zrobić w wierszu polecenia:
(jak już wspomniano w komentarzach do pytania, dzięki @Kai Petzke za sugestię python3).
W rzeczywistości python nie jest moim ulubionym narzędziem, jeśli chodzi o przetwarzanie json w wierszu poleceń. Dla prostego ładnego drukowania jest ok, ale jeśli chcesz manipulować Jsonem, może się to skomplikować. Wkrótce będziesz musiał napisać osobny plik skryptu, możesz skończyć z mapami, których klucze to u „some-key” (unicode python), co utrudnia wybór pól i tak naprawdę nie idzie w kierunku ładnego -druk.
Możesz także użyć jq :
i dostajesz kolory jako bonus (i znacznie łatwiejsze rozszerzanie).
Dodatek: W komentarzach dotyczących korzystania z jq do przetwarzania dużych plików JSON z jednej strony występuje zamieszanie, a z drugiej strony bardzo duży program jq. Praktycznym ograniczeniem do ładnego drukowania pliku składającego się z jednego dużego obiektu JSON jest pamięć RAM. Aby wydrukować całkiem ładnie plik 2 GB składający się z pojedynczej tablicy danych rzeczywistych, „maksymalny rozmiar rezydentnego zestawu” wymagany do ładnego drukowania wynosił 5 GB (niezależnie od tego, czy używa się jq 1.5, czy 1.6). Zauważ też, że jq może być używane z poziomu Pythona po
pip install jq
.źródło
jq '' < some.json
python3 -m json.tool <IN >OUT
, ponieważ zachowuje to oryginalną kolejność pól w dyktonach JSON. Wersja 2 interpretera Pythona sortuje pola w porządku rosnącym alfabetycznie, co często nie jest tym, czego chcesz.Możesz użyć wbudowanego modułu pprint (https://docs.python.org/3.6/library/pprint.html) .
Jak można odczytać plik z danymi JSON i wydrukować go.
źródło
Pygmentize + Python json.tool = Ładny wydruk z podświetlaniem składni
Pygmentize to narzędzie zabójcy. Zobacz.
Łączę python json.tool z pygmentize
Zobacz powyższy link, aby uzyskać instrukcję instalacji pygmentize.
Demo tego jest na poniższym obrazku:
źródło
-g
tak naprawdę nie działa;) Ponieważ dane wejściowe pochodzą ze stdin, pygmentize nie jest w stanie dobrze zgadnąć. Musisz wyraźnie określić leksykon:echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
Skorzystaj z tej funkcji i nie przejmuj się koniecznością pamiętania, czy Twój JSON to
str
czydict
jeszcze raz - wystarczy spojrzeć na ładny nadruk:źródło
Kiedyś napisałem
prettyjson()
funkcję do tworzenia ładnie wyglądających wyników. Możesz pobrać implementację z tego repozytorium .Główną cechą tej funkcji jest to, że próbuje utrzymywać dyktowanie i wyświetlać pozycje w jednym wierszu, dopóki nie
maxlinelength
zostanie osiągnięty określony . Powoduje to powstanie mniejszej liczby wierszy JSON, wyjście wygląda na bardziej kompaktowe i łatwiejsze do odczytania.Możesz wytworzyć tego rodzaju dane wyjściowe na przykład:
UPD Dec'19: Umieściłem kod w osobnym repozytorium , poprawiłem kilka błędów i wprowadziłem kilka innych poprawek.
źródło
Aby móc ładnie drukować z wiersza poleceń i mieć kontrolę nad wcięciami itp., Możesz ustawić alias podobny do tego:
A następnie użyj aliasu na jeden z następujących sposobów:
źródło
Użyj pprint: https://docs.python.org/3.6/library/pprint.html
print()
w porównaniu dopprint.pprint()
źródło
pprint
nie tworzy ważnego dokumentu JSON.Oto prosty przykład ładnego drukowania JSON na konsoli w przyjemny sposób w Pythonie, bez wymagania, aby JSON był na twoim komputerze jako plik lokalny:
źródło
Działa, aby wyświetlić lub zapisać go w pliku.
źródło
Myślę, że lepiej jest wcześniej przeanalizować plik Json, aby uniknąć błędów:
źródło
Możesz spróbować pprintjson .
Instalacja
Stosowanie
Ładnie wydrukuj JSON z pliku za pomocą CLI pprintjson.
Ładny wydruk JSON ze standardowego interfejsu przy użyciu CLI pprintjson.
Całkiem drukuj JSON z łańcucha za pomocą CLI pprintjson.
Ładny nadruk JSON z sznurka z wcięciem 1.
Ładnie wydrukuj JSON z łańcucha i zapisz dane wyjściowe w pliku output.json.
Wynik
źródło
Jest daleki od ideału, ale spełnia swoje zadanie.
możesz to poprawić, dodać wcięcia i tak dalej, ale jeśli chcesz po prostu czytać czystsze JSON, to jest to właściwa droga.
źródło