Czy ktoś wie o prostym sposobie drukowania wydruków JSON w Go?
Standardowy pakiet http://golang.org/pkg/encoding/json/ nie wydaje się zawierać w tym celu funkcji (EDYCJA: tak, zobacz zaakceptowaną odpowiedź), a szybkie google nie pokazuje niczego oczywistego.
Zastosowania, których szukam, zarówno ładnie drukują wynik, jak json.Marshal
i po prostu formatują ciąg pełen JSON z dowolnego miejsca, więc łatwiej jest czytać do celów debugowania.
json
go
pretty-print
Brad Peabody
źródło
źródło
{name: "value"}
nie będzie w porządku, mimo że większość interpreterów JavaScript go używa . Działa tylko{"name": "value"}
z funkcjami biblioteki Go JSON.Odpowiedzi:
Przez ładny druk zakładam, że masz na myśli wcięcia
zamiast
Najłatwiej to zrobić za pomocą
MarshalIndent
, który pozwoli ci określić, w jaki sposób chcesz wciąć za pomocąindent
argumentu. Tak więcjson.MarshalIndent(data, "", " ")
będzie ładnie drukować przy użyciu czterech spacji do wcięcia.źródło
json.MarshalIndent(data, "", "\t")
jeśli chcesz zakładki.json.MarshalIndent(data, "", "🐱")
jeśli chcesz koty. przepraszamjson.MarshalIndent(data, "", "\t🐱")
jeśli chcesz ... pręgowane koty ... przepraszamPrzyjęta odpowiedź jest świetna, jeśli masz obiekt, który chcesz zmienić w JSON. Pytanie wspomina również o ładnym drukowaniu dowolnego łańcucha JSON i właśnie to próbowałem zrobić. Chciałem tylko całkiem zalogować JSON z żądania POST (konkretnie raport o naruszeniu CSP ).
Aby użyć
MarshalIndent
, musisz to zrobićUnmarshal
w obiekcie. Jeśli potrzebujesz tego, idź, ale nie zrobiłem tego. Jeśli chcesz po prostu wydrukować tablicę bajtów, zwykłyIndent
jest twoim przyjacielem.Oto, z czym skończyłem:
źródło
Myślę, że dla lepszego wykorzystania pamięci jest to lepsze:
źródło
SetIndent
został ostatnio dodany? Zasadniczo jest to nieznane większości.SetIndent
(pierwotnie nazwanyIndent
) najwyraźniej został dodany w marcu 2016 r. i wydany w wersji Go 1.7, co było około 3 lata po pierwotnym zadaniu tego pytania: github.com/golang/go/commit/… github.com/golang/go/commit/ …Byłem sfrustrowany brakiem szybkiego, wysokiej jakości sposobu na doprowadzenie JSON do pokolorowanego sznurka w Go, więc napisałem własnego Marshallera o nazwie ColorJSON .
Dzięki niemu możesz łatwo tworzyć takie dane wyjściowe, używając bardzo małego kodu:
Piszę teraz dokumentację na ten temat, ale byłem podekscytowany, mogąc podzielić się moim rozwiązaniem.
źródło
Edytuj Patrząc wstecz, nie jest to idiomatyczne Go. Takie małe funkcje pomocnicze zwiększają złożoność. Ogólnie filozofia Go woli obejmować 3 proste linie zamiast 1 trudnej linii.
Jak wspomniano @robyoder,
json.Indent
jest to najlepsza droga. Pomyślałem, że dodam tę małąprettyprint
funkcję:https://go-sandbox.com/#/R4LWpkkHIN lub http://play.golang.org/p/R4LWpkkHIN
źródło
Oto czego używam. Jeśli nie uda się wydrukować JSON, po prostu zwraca oryginalny ciąg. Przydatne do drukowania odpowiedzi HTTP, które powinny zawierać JSON.
źródło
Oto moje rozwiązanie :
źródło
Prosta, ładna drukarka z półki w Go. Można skompilować go do pliku binarnego poprzez:
Odczytuje ze standardowego wejścia, zapisuje na standardowe wyjście i pozwala ustawić wcięcie:
Pozwala na uruchamianie poleceń bash, takich jak:
źródło
źródło
jestem trochę nowy, ale jak dotąd zebrałem:
To jest wykonanie funkcji i tylko standardowe
Kod:
źródło
źródło