Próbuję znaleźć sposób na pretty print
strukturę danych JavaScript w postaci czytelnej dla człowieka do debugowania.
Mam dość dużą i skomplikowaną strukturę danych przechowywaną w JS i muszę napisać kod, aby nim manipulować. Aby dowiedzieć się, co robię i co robię źle, naprawdę potrzebuję możliwości zobaczenia całej struktury danych i zaktualizowania jej za każdym razem, gdy wprowadzam zmiany za pośrednictwem interfejsu użytkownika.
Z tym wszystkim mogę sobie poradzić, poza znalezieniem fajnego sposobu na zrzucenie struktury danych JavaScript do ciągu czytelnego dla człowieka. JSON by się nadał, ale naprawdę musi być ładnie sformatowany i z wcięciami. Zwykle używałbym do tego doskonałego narzędzia do dumpingu DOM Firebuga, ale naprawdę muszę być w stanie zobaczyć całą strukturę na raz, co wydaje się nie być możliwe w Firebug.
Wszelkie sugestie są mile widziane.
Z góry dziękuję.
Odpowiedzi:
Napisałem funkcję do zrzutu obiektu JS w czytelnej formie, chociaż wynik nie jest wcięty, ale nie powinno być zbyt trudne, aby to dodać: zrobiłem tę funkcję z jednej, którą stworzyłem dla Lua (która jest znacznie bardziej złożona ), który rozwiązał ten problem z wcięciami.
Oto „prosta” wersja:
Popatrzę, jak to poprawić.
Uwaga 1: Aby go użyć, zrób
od = DumpObject(something)
i użyj od.dump. Zagmatwane, ponieważ chciałem, aby wartość len (liczba elementów) też miała inny cel. Sprawienie, by funkcja zwracała tylko ciąg znaków, jest trywialne.Uwaga 2: nie obsługuje pętli w referencjach.
EDYTOWAĆ
Zrobiłem wersję z wcięciem.
Wybierz wcięcie w wierszu z wywołaniem rekurencyjnym, a styl nawiasów klamrowych, przełączając skomentowaną linię po tym.
... Widzę, że stworzyłeś swoją własną wersję, co jest dobre. Zwiedzający będą mieli wybór.
źródło
Użyj JSON.stringify Crockforda w następujący sposób:
Zmienna
text
wyglądałaby następująco:Nawiasem mówiąc, nie wymaga to niczego więcej niż tego pliku JS - będzie działać z każdą biblioteką itp.
źródło
JSON.stringify((function(){var x = []; x.push(x); return x})())
i wielu innych rodzajów obiektówJSON.stringify(/foo/)
.Możesz użyć następujących
źródło
W
Firebug
, jeśli tylkoconsole.debug ("%o", my_object)
możesz kliknąć na niego w konsoli i wejść do interaktywnego eksploratora obiektów. Pokazuje cały obiekt i pozwala rozwinąć zagnieżdżone obiekty.źródło
W przypadku Node.js użyj:
Dokumentacja API
źródło
Dla tych, którzy szukają niesamowitego sposobu, aby zobaczyć swój obiekt, sprawdź prettyPrint.js
Tworzy tabelę z konfigurowalnymi opcjami widoku do wydrukowania gdzieś w dokumencie. Lepiej patrzeć niż w
console
.źródło
Programuję
Rhino
i nie zadowalała mnie żadna z zamieszczonych tutaj odpowiedzi. Napisałem więc własną ładną drukarkę:Wynik wygląda następująco:
Opublikowałem to również jako podsumowanie tutaj wszelkich przyszłych zmian, które mogą być wymagane.
źródło
jsDump
staje się
QUnit (framework do testów jednostkowych używany przez jQuery) przy użyciu lekko poprawionej wersji jsDump.
JSON.stringify () nie jest najlepszym wyborem w niektórych przypadkach.
źródło
Idąc za przykładem PhiLho (bardzo dziękuję :)), napisałem własną, ponieważ nie mogłem zmusić go do zrobienia tego, co chciałem. Jest dość szorstki i gotowy, ale spełnia moje wymagania. Dziękuję wszystkim za doskonałe sugestie.
Wiem, że to nie jest genialny kod, ale warto. Ktoś może uznać to za przydatne:
źródło
To tak naprawdę tylko komentarz do artykułu Jasona Buntinga „Użyj JSON.stringify Crockforda”, ale nie byłem w stanie dodać komentarza do tej odpowiedzi.
Jak zauważono w komentarzach, JSON.stringify nie współpracuje dobrze z biblioteką Prototype (www.prototypejs.org). Jednak dość łatwo jest sprawić, że będą dobrze ze sobą współpracować, tymczasowo usuwając metodę Array.prototype.toJSON, którą dodaje prototyp, uruchom stringify () Crockforda, a następnie umieść ją z powrotem w następujący sposób:
źródło
Myślałem, że odpowiedź J. Buntings na temat używania JSON.stringify była również dobra. A na marginesie, jeśli używasz YUI, możesz użyć JSON.stringify za pośrednictwem obiektu YUI JSON. W moim przypadku musiałem zrzucić do HTML, więc łatwiej było po prostu poprawić / wyciąć / wkleić odpowiedź PhiLho.
źródło
Wiele osób piszących kod w tym wątku, z wieloma komentarzami na temat różnych problemów. Podobało mi się to rozwiązanie, ponieważ wydawało się kompletne i był to pojedynczy plik bez zależności.
przeglądarka
nodejs
Działało „po wyjęciu z pudełka” i ma wersje dla węzłów i przeglądarki (prawdopodobnie tylko różne opakowania, ale nie szukałem potwierdzenia).
Biblioteka obsługuje również ładne drukowanie XML, SQL i CSS, ale nie próbowałem tych funkcji.
źródło
Prosty do drukowania elementów jako ciągów:
źródło
Moja biblioteka NeatJSON ma wersje Ruby i JavaScript . Jest dostępny bezpłatnie na (liberalnej) licencji MIT. Możesz obejrzeć demo / konwerter online pod adresem :
http://phrogz.net/JS/neatjson/neatjson.html
Niektóre funkcje (wszystkie opcjonalne):
źródło
flexjson zawiera funkcję prettyPrint (), która może dać ci to, czego chcesz.
źródło