Jak przekonwertować obiekt JavaScript na ciąg?
Przykład:
var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)
Wynik:
Obiekt {a = 1, b = 2} // bardzo ładnie czytelny wynik :)
Element: [obiekt Object] // nie mam pojęcia, co jest w środku :(
javascript
string
object
serialization
tostring
użytkownik680174
źródło
źródło
console.log("Item", obj);
. Nie potrzeba nic skomplikowanego.Odpowiedzi:
Poleciłbym użycie
JSON.stringify
, który konwertuje zestaw zmiennych w obiekcie na ciąg JSON. Większość współczesnych przeglądarek obsługuje tę metodę natywnie, ale dla tych, które tego nie robią, możesz dołączyć wersję JS :źródło
foo: function () {...}
. : .JSON.stringify(obj, null, 2);
dla ładniejszego wyjścia.Zastosowanie javascript String () funkcja
lub stringify ()
źródło
JSON.stringify(yourobject)
pokojówka mój dzień!Oczywiście, aby przekonwertować obiekt na ciąg, musisz użyć własnej metody, takiej jak:
W rzeczywistości powyższe pokazuje tylko ogólne podejście; możesz użyć czegoś takiego jak http://phpjs.org/functions/var_export:578 lub http://phpjs.org/functions/var_dump:604
lub, jeśli nie korzystasz z metod (funkcji jako właściwości swojego obiektu), możesz być w stanie użyć nowego standardu (ale nie jest on zaimplementowany w starszych przeglądarkach, chociaż możesz znaleźć narzędzie, które może w tym pomóc), JSON .stringify (). Ale znowu to nie zadziała, jeśli obiekt używa funkcji lub innych właściwości, które nie są serializowane w JSON.
źródło
Upraszczając
console
, możesz po prostu użyć przecinka zamiast+
.+
Spróbuje przekonwertować obiekt na ciąg znaków, natomiast przecinek będzie go wyświetlić odrębnie w konsoli.Przykład:
Wynik:
Odniesienie: https://developer.mozilla.org/en-US/docs/Web/API/Console.log
źródło
console.log(o)
:? Ponieważ jeśli spróbujesz zalogować obiekt dodany do ciągu, w rzeczywistości wywołujetoString()
on obiekt.console.log
ostatecznie wywołuje coś, co nazywa się tym,Printer
co zauważa specyfikacja: „Sposób, w jaki implementacja drukuje argumenty, zależy od implementacji” - co oznacza, że każda przeglądarka może to zrobić inaczej (patrz console.spec.whatwg.org/#printer ). Firefox wyświetli obiekty w postaci łańcucha, ale ładnie pokolorowane. Chrome wyświetli obiekt jako interaktywną grupę, którą możesz rozwinąć, aby zobaczyć właściwości. Spróbuj!console.log('Item: ', o);
jest nadalItem: [object Object]
.console.log
możesz użyćconsole.dir(o)
do wydrukowania obiektu javascript zamiast do wydrukowania go jako łańcucha. W narzędziach programistycznych umożliwia to otwarcie obiektu i sprawdzenie wszystkich właściwości, nawet tablic. (patrz: developer.mozilla.org/de/docs/Web/API/Console/dir )EDYCJA Nie używaj tej odpowiedzi, ponieważ nie działa ona w Internet Explorerze. Użyj rozwiązania Gary Chambers .
toSource () to funkcja, której szukasz, która zapisze ją jako JSON.
źródło
toSource()
nie działa w IE.toSource()
nie jest uznanym standardem, dlatego nie można zagwarantować, że będzie obsługiwany we wszystkich przeglądarkach.Jedna opcja :
console.log('Item: ' + JSON.stringify(o));
Kolejna opcja (jak wskazał soktinpk w komentarzach) i lepsza do debugowania konsoli IMO:
console.log('Item: ', o);
źródło
Żadne z rozwiązań tutaj nie działało dla mnie. JSON.stringify wydaje się być tym, co mówi wiele osób, ale odcina funkcje i wydaje się dość zepsuty dla niektórych obiektów i tablic, które próbowałem podczas testowania.
Stworzyłem własne rozwiązanie, które działa przynajmniej w Chrome. Opublikuj go tutaj, aby każdy, kto szuka tego w Google, mógł go znaleźć.
EDYCJA: Wiem, że ten kod można ulepszyć, ale po prostu nigdy tego nie zrobiłem. Użytkownik andrey zasugerował tutaj ulepszenie z komentarzem:
Wykorzystaj to na własne ryzyko, ponieważ w ogóle tego nie zweryfikowałem. Jako sugestię możesz zaproponować dodatkowe ulepszenia.
źródło
,
na końcu każdego obiektu / tablicy znajduje się znak końcowy .Jeśli po prostu wysyłasz dane do konsoli, możesz użyć
console.log('string:', obj)
. Zwróć uwagę na przecinek .źródło
console.log
są często wyświetlane po tym, jak AJAX zakończy równoległe dostarczanie tablicy danych, co prowadzi do mylących wyników. W takich przypadkach należy klonować lub serializować obiekty: ponieważ zarejestrowaliśmy zduplikowany obiekt, nawet gdy AJAX zakończy swoją pracę, wypełni „stare” dane.W przypadkach, gdy wiesz, że obiekt jest tylko logiczną, datą, łańcuchem, liczbą itp. Funkcja javascript String () działa dobrze. Niedawno uznałem to za przydatne w przypadku wartości pochodzących z funkcji $ .each jquery.
Na przykład następujące przekonwertuje wszystkie elementy w „wartości” na ciąg znaków:
Więcej informacji tutaj:
http://www.w3schools.com/jsref/jsref_string.asp
źródło
var my_string = ''+value+'';
źródło
Szukałem tego i napisałem głęboką rekurencyjną z wcięciem:
Stosowanie :
objToString({ a: 1, b: { c: "test" } })
źródło
if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }
tę funkcję, przy czym MAX_DEPTH_LEVEL jest wybraną maksymalną liczbą warstw obiektów do wykopania.Jeśli chcesz tylko zobaczyć obiekt do debugowania, możesz użyć
źródło
1.
2)
źródło
Metody JSON są gorsze od prymitywnego silnika .toSource () silnika Gecko.
Zobacz odpowiedź artykułu SO na testy porównawcze.
Również powyższa odpowiedź odnosi się do http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html, które, podobnie jak JSON, (które drugi artykuł http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json korzysta z „ExtJs JSON kod kod źródłowy” ) nie może obsługiwać referencji cyklicznych i jest niekompletny. Poniższy kod pokazuje ograniczenia (fałszerstwa) (poprawione do obsługi tablic i obiektów bez zawartości).
( bezpośredni link do kodu w //forums.devshed.com/ ... / tosource-with-arrays-in-ie-386109 )
który wyświetla:
i
i
źródło
W istniejących odpowiedziach brakuje jednej prostej opcji (dla najnowszych przeglądarek i Node.js):
Wolałbym to, ponieważ
JSON.stringify()
ma pewne ograniczenia (np. W przypadku okrągłych struktur).źródło
Wygląda na to, że JSON akceptuje drugi parametr, który może pomóc w funkcjach - zamień , rozwiązuje to problem konwersji w najbardziej elegancki sposób:
źródło
Jeśli zależy Ci tylko na ciągach, obiektach i tablicach:
źródło
stringify-object
to dobra biblioteka npm wykonana przez zespół Yeoman: https://www.npmjs.com/package/stringify-objectnastępnie:
Oczywiście jest to interesujące tylko wtedy, gdy masz okrągły obiekt, z którym by się nie powiodło
JSON.stringify();
źródło
Spójrz na wtyczkę jQuery-JSON
Zasadniczo używa JSON.stringify, ale wraca do własnego parsera, jeśli przeglądarka go nie implementuje.
źródło
Ponieważ firefox nie określa jakiegoś obiektu jako obiektu ekranowego; jeśli chcesz mieć taki sam wynik, jak
JSON.stringify(obj)
:źródło
W przypadku obiektów zagnieżdżonych:
źródło
Ponieważ Javascript v1.0 działa wszędzie (nawet IE), jest to podejście natywne i pozwala na bardzo kosztowny wygląd twojego obiektu podczas debugowania i produkcji https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / Global_Objects / Object / toString
Przydatny przykład
Dodatkowo jako bonus
źródło
Jeśli możesz użyć lodash, możesz to zrobić w ten sposób:
Z lodash
map()
możesz także iterować obiekty. Spowoduje to odwzorowanie każdego wpisu klucza / wartości na jego reprezentację ciągu:I
join()
połącz wpisy tablicy.Jeśli możesz użyć ciągu szablonów ES6, działa to również:
Pamiętaj, że to nie przechodzi przez obiekt:
Podobnie jak węzły
util.inspect()
zrobią:źródło
Jeśli używasz frameworku Java Dojo, istnieje już wbudowana funkcja: dojo.toJson (), która byłaby używana w ten sposób.
który zwróci ciąg. Jeśli chcesz przekonwertować obiekt na dane json, dodaj drugi parametr true.
http://dojotoolkit.org/reference-guide/dojo/toJson.html#dojo-tojson
źródło
przykład do użycia:
twój_obiekt1.txt:
twój_obiekt2.txt:
źródło
Dla twojego przykładu myślę, że
console.log("Item:",o)
byłoby to najłatwiejsze. Aleconsole.log("Item:" + o.toString)
działałoby również.Używając metody numer jeden, używa ładnego menu rozwijanego w konsoli, więc długi obiekt działałby ładnie.
źródło
źródło
Mam nadzieję, że ten przykład pomoże wszystkim tym, którzy pracują nad szeregiem obiektów
źródło
Jeśli nie chcesz odtwarzać, dołącz () do Object.
źródło
Jeśli chcesz minimalistyczną metodę konwersji zmiennej na ciąg znaków dla sytuacji typu wyrażenia wbudowanego,
''+variablename
jest to najlepsza gra w golfa.Jeśli „variablename” jest obiektem i użyjesz operacji konkatenacji pustych ciągów, będzie to denerwujące
[object Object]
, w takim przypadku prawdopodobnie będziesz potrzebować niezwykle pozytywnejJSON.stringify
odpowiedzi Gary'ego C. na zadane pytanie, o której możesz przeczytać w Sieci deweloperów Mozilli pod linkiem w tej odpowiedzi u góry .źródło