2011-07-19 20 views

Odpowiedz

9

Zastosowanie JSON JS

+3

To nie jest biblioteka macierzysta w starszych przeglądarkach. Będziesz musiał wyraźnie uwzględnić [bibliotekę] (https://github.com/douglascrockford/JSON-js), aby je uwzględnić. – Spycho

+0

Dzięki za wskazanie Spycho. –

6

Aby przekonwertować tekst JSON do obiektu, można skorzystać z funkcji eval(). eval() wywołuje kompilator JavaScript. Ponieważ JSON jest prawidłowym podzbiorem JavaScript, kompilator poprawnie przeanalizuje tekst i stworzy strukturę obiektu. Tekst musi być zawijany w pareny, aby uniknąć potykania się o niejasności w składni JavaScript.

var myObject = eval('(' + myJSONtext + ')'); 
+2

Może to być niebezpieczne, ponieważ spowoduje wykonanie dowolnego JS. Jeśli Twój JSON jest generowany z treści przesłanych przez użytkownika, możesz otworzyć się na ataki XSS. – Spycho

+0

Tak, oczywiście, nie powinieneś robić niczego takiego bez odpowiedniej weryfikacji ... –

+2

OP poprosił o najszybszą, o ile nam wiadomo, OP kontroluje zawartość za znacznikiem skryptu. Dobry komentarz. –

2
var myObject = eval('(' + myJSONtext + ')'); 
+0

Funkcja eval jest bardzo szybka. Może jednak skompilować i wykonać dowolny program JavaScript, więc mogą wystąpić problemy z bezpieczeństwem. Korzystanie z eval jest wskazane, gdy źródło jest zaufane i kompetentne. O wiele bezpieczniej jest używać parsera JSON. W aplikacjach internetowych przez XMLHttpRequest komunikacja jest dozwolona tylko dla tego samego pochodzenia, które udostępnia tę stronę, więc jest zaufana. Ale może nie być kompetentny. Jeśli serwer nie jest rygorystyczny w swoim kodowaniu JSON lub nie skrupulatnie sprawdza wszystkie swoje dane wejściowe, może dostarczyć nieprawidłowy tekst JSON, który może zawierać niebezpieczny skrypt ... – jinglesthula

1

Jeśli łańcuch JSON pochodzi z serwera można spróbować techniki JSONP. JSON jest analizowany natywnie w przeglądarce (szybko) po załadowaniu i bez żadnej biblioteki.

np: jeśli odpowiedź jest {"name":"Peter"} odpowiedź

JSONP będzie coś takiego: yourFunction({"name":"Peter"})

yourFunction muszą być zdefiniowane globalnie funkcji na stronie, która będzie odbierać połączenia, jak:

function yourFunction(json){ 
    //do something with the JSON 
} 
Powiązane problemy