Biorąc pod uwagę ciąg danych JSON, jak mogę bezpiecznie przekształcić ten ciąg w obiekt JavaScript?
Oczywiście mogę to zrobić niepewnie za pomocą czegoś takiego:
var obj = eval("(" + json + ')');
ale to sprawia, że jestem podatny na ciąg JSON zawierający inny kod, którego ewolucję wydaje się bardzo niebezpieczna.
javascript
json
Matt Sheppard
źródło
źródło
eval
do analizowania ciągu JSON, ponieważ wystawiałbyś swój kod na „wstrzyknięcie kodu”. UżyjJSON.parse(yourString)
zamiast tego.Odpowiedzi:
JSON.parse(jsonString)
jest czystym podejściem JavaScript, o ile możesz zagwarantować dość nowoczesną przeglądarkę.źródło
Requires document to be in IE8+ standards mode to work in IE8.
Metoda jQuery jest teraz przestarzała. Zamiast tego użyj tej metody:
Oryginalna odpowiedź przy użyciu przestarzałej funkcji jQuery :
Jeśli używasz jQuery, po prostu użyj:
Właśnie tego szukasz (zobacz dokumentację jQuery ).
źródło
jQuery.parseJSON
domyślnie używa,JSON.parse
jeśli istnieje, więc jedynym powodem, aby użyć tego w porównaniu z rzeczywistym, jest to, że potrzebujesz rezerwy dla <IE7. Zostało to zmienione w jQuery 1.6: james.padolsey.com/jquery/#v=1.6.0&fn=jQuery.parseJSONTa odpowiedź dotyczy IE <7, w przypadku współczesnych przeglądarek sprawdź odpowiedź Jonathana powyżej.
Ta odpowiedź jest nieaktualna, a odpowiedź Jonathana powyżej (
JSON.parse(jsonString)
) jest teraz najlepszą odpowiedzią .JSON.org ma parsery JSON dla wielu języków, w tym czterech różnych dla JavaScript. Wierzę, że większość ludzi uważa json2.js za implementację goto.
źródło
Skorzystaj z prostego przykładu kodu w „ JSON.parse () ”:
i odwrócenie:
źródło
Nie jestem pewien, czy można to zrobić inaczej, ale oto jak to zrobić w Prototypie (samouczek JSON) .
Wywołanie
evalJSON()
z wartością true, ponieważ argument dezynfekuje przychodzący ciąg.źródło
To wydaje się być problemem:
Dane wejściowe, które są odbierane przez Ajax websocket itp., I będą w formacie String, ale musisz wiedzieć, czy tak
JSON.parsable
. Najważniejsze jest to, że jeśli zawsze go uruchomiszJSON.parse
, program MOŻE kontynuować „z powodzeniem”, ale nadal zobaczysz błąd zgłaszany do konsoli z przerażeniem"Error: unexpected token 'x'"
.źródło
(function(){ postCookiesToHostileServer(); }());
jeszcze bardziej nieprzyjemnymi rzeczami w kontekście Node.Jeśli używasz jQuery , możesz także użyć:
Następnie możesz robić takie rzeczy jak
itp.
źródło
Oddzwanianie jest przekazywane zwracane dane, które będą obiektem JavaScript lub tablicą zdefiniowaną przez strukturę JSON i analizowane przy użyciu
$.parseJSON()
metody.źródło
Dla zabawy, oto sposób korzystania z funkcji:
źródło
eval
z niego i nie jest bezpieczne. : Peval
ale jest bardziej skomplikowane i trudniejsze do zrozumienia dla opiekunów.Korzystanie
JSON.parse
jest prawdopodobnie najlepszym sposobem.Oto przykład demo na żywo .
źródło
Najłatwiejszy sposób przy użyciu
parse()
metody:Następnie możesz uzyskać wartości elementów JSON, na przykład:
Korzystanie z jQuery zgodnie z opisem w
jQuery.parseJSON()
dokumentacji:źródło
Spróbuj użyć metody z tym obiektem Data. ex:
Data='{result:true,count:1}
'Ta metoda naprawdę pomaga w Nodejs, gdy pracujesz z programowaniem portu szeregowego
źródło
eval
lubFunction
jest równie wrażliweundefined; function bye() {...} bye();
Znalazłem „lepszy” sposób:
W CoffeeScript:
W JavaScript:
źródło
Parsowanie JSON jest zawsze bólem. Jeśli dane wejściowe nie są zgodne z oczekiwaniami, generuje błąd i psuje to, co robisz.
Możesz użyć poniższej małej funkcji, aby bezpiecznie przeanalizować dane wejściowe. Zawsze obraca obiekt, nawet jeśli dane wejściowe są niepoprawne lub są już obiektami, które są lepsze w większości przypadków:
źródło
Object.prototype.toString.call(input) === '[object Object]'
powinien byćtypeof input === 'object'
IMOnull
sprawą, a tablica jest obiektem . Jeśli chcesz to przetestować, możesz użyćinstanceof
. Ponadto, jeśli dasz tej funkcji anArray
, złapie się ireturn def
kiedy zwróci idealnie idealną tablicę.toString()
metody sprawdzania, czy zmienna jest obiektem, czy nie. Zobacz AngularJS , jQuery , Underscore , a nawet devsjson.parse zmieni się w obiekt.
źródło
Jeśli mamy taki ciąg:
możemy po prostu użyć
JSON.parse
dwukrotnie, aby przekonwertować ten ciąg na obiekt JSON:Możemy wyodrębnić wartości z obiektu JSON, używając:
Wynik będzie:
źródło
JSON.parse()
konwertuje dowolny ciąg JSON przekazany do funkcji na obiekt JSON.Aby to lepiej zrozumieć, naciśnij, F12aby otworzyć „Inspect Element” w przeglądarce i przejdź do konsoli, aby napisać następujące polecenia:
Teraz uruchom polecenie:
Otrzymasz wynik jako obiekt
{result: true, count: 1}
.Aby użyć tego obiektu, możesz przypisać go do zmiennej, może
obj
:Za pomocą operatora
obj
i (kropka.
) można uzyskać dostęp do właściwości obiektu JSON.Spróbuj uruchomić polecenie:
źródło
Oficjalna dokumentacja :
JSON.parse()
Metoda analizuje ciąg JSON, konstruowanie wartości JavaScript lub obiekt opisany przez ciąg.reviver
Można zapewnić opcjonalną funkcję do przeprowadzenia transformacji obiektu wynikowego przed jego zwróceniem.Składnia:
Parametry:
text
: Ciąg do analizy jako JSON. Zobacz obiekt JSON, aby uzyskać opis składni JSON.reviver (optional)
: Jeśli funkcja, określa, w jaki sposób wartość pierwotnie wygenerowana przez parsowanie jest przekształcana przed zwróceniem.Zwracana wartość
Obiekt odpowiadający podanemu tekstowi JSON.
Wyjątki
Zgłasza wyjątek SyntaxError, jeśli analizowany ciąg nie jest prawidłowym kodem JSON.
źródło
Konwersja obiektu na JSON, a następnie jego parsowanie działa dla mnie jak:
źródło
Analizując ciąg JSON
JSON.parse()
, dane stają się obiektem JavaScript:Tutaj JSON reprezentuje przetwarzanie zestawu danych JSON.
Wyobraź sobie, że otrzymaliśmy ten tekst z serwera internetowego:
Aby przeanalizować w obiekcie JSON:
Oto
obj
odpowiedni obiekt JSON, który wygląda:Aby pobrać wartość, użyj
.
operatora:Konwertuj obiekt JavaScript na ciąg znaków za pomocą
JSON.stringify()
.źródło
Wystarczy przeanalizować okładkę dla różnych typów danych wejściowych
Analizuj dane za pomocą JSON.parse (), a dane stają się obiektem JavaScript.
Podczas korzystania z JSON.parse () na JSON pochodzącym z tablicy metoda zwróci tablicę JavaScript zamiast obiektu JavaScript.
Obiekty daty nie są dozwolone w JSON. Bo Daty robią coś takiego
Funkcje nie są dozwolone w JSON. Jeśli potrzebujesz dołączyć funkcję, napisz ją jako ciąg.
źródło
Starsze pytanie, wiem, jednak nikt nie zauważa tego rozwiązania za pomocą
new Function()
anonimowej funkcji zwracającej dane.Tylko przykład:
Jest to trochę bardziej bezpieczne, ponieważ wykonuje się wewnątrz funkcji i nie kompiluje bezpośrednio w kodzie. Jeśli więc wewnątrz znajduje się deklaracja funkcji, nie będzie ona powiązana z domyślnym obiektem okna.
Używam tego do łatwego i szybkiego „kompilowania” ustawień konfiguracji elementów DOM (na przykład atrybutu danych).
źródło
Podsumowanie:
JavaScript (zarówno przeglądarka, jak i NodeJS) mają wbudowany
JSON
obiekt. Na tym obiekcie są 2 wygodne metody radzenia sobieJSON
. Są to:JSON.parse()
BierzeJSON
jako argument, zwraca obiekt JSJSON.stringify()
Pobiera obiekt JS jako argument zwracającyJSON
obiektInne aplikacje:
Poza tym bardzo wygodnie sobie z
JSON
nimi radzą można je wykorzystać na inne sposoby. Połączenie obuJSON
metod pozwala nam bardzo łatwo tworzyć głębokie klony tablic lub obiektów. Na przykład:źródło
Możesz także użyć
reviver
funkcji do filtrowania.Aby uzyskać więcej informacji przeczytaj
JSON.parse
.źródło
JSON.parse to właściwy sposób na konwersję łańcucha na obiekt, ale jeśli analizowany ciąg nie jest obiektem lub łańcuch nie jest poprawny, wygeneruje błąd, który spowoduje przerwanie reszty kodu, więc jest idealny do zawijania funkcji JSON.parse w try-catch like
źródło
Spróbuj tego. Ten jest napisany na maszynie.
źródło
JSON.parse()
?źródło