2012-06-22 12 views
6

Korzystam z json2.js z . Kiedy chcę stringify, robię JSON.stringify() ... działa świetnie.Jak określić, który obiekt JSON jest używany (Crockford's lub inny)?

Jednak ci, którzy spojrzeli na kod, wiedzą, że odrzuca on istniejące obiekty i właściwości JSON. Podejrzewam, że pewien problem, który mam, może wynikać z tego szacunku.

Czy istnieje właściwość obiektu JSON, którą mogę sprawdzić, aby sprawdzić, czy przeglądarka używa obiektu Crockford, czy innego? Byłoby miło być w stanie coś zrobić jak alert(JSON.version());

+1

Czy można bezpiecznie założyć, że albo wszystkie obiekty JSON jest realizacja Crockforda lub żaden z nich? Jeśli tak, to możesz sprawdzić globalny obiekt JSON przed wprowadzeniem skryptu Crockforda, ustawić zmienną globalną, taką jak 'nativeJSON = false;', którą możesz później odwołać w swoim kodzie. –

+0

Również +1 za wskazanie tego przydatnego skryptu! –

+0

@ davidkennedy85, Wierzę (ale nie wiem), że wiele przeglądarek w tych dniach ma natywne obiekty JSON w ich implementacji javascript ... Myślę. Nie wiem; z mojej ligi. –

Odpowiedz

3

Przed załadowaniem skryptu Crockforda, można sprawdzić globalnego obiektu JSON dokładnie tak jak on:

<script> 
    var JSON, 
     nativeJSON = true; 

    if (!JSON) { 
     var nativeJSON = false; 
     document.write('<script src="js/json2.js"><\/script>'); 
    } 

    if (!nativeJSON) { 
     // All JSON objects are using Crockford's implementation 
    } else { 
     // All JSON objects from here on out are NOT using Crockford's implementation 
    } 
</script> 
+0

Nie [* all *] (https://github.com/douglascrockford/JSON-js/blob/master/json2.js), tak myślę? – Arjan

+1

Czy skrypty ładowane za pomocą atrybutu 'src' są wykonywane w kolejności określonej na stronie za każdym razem? Nie chciałbym, aby sprawdzanie nastąpiło po załadowaniu json2.js. –

+0

To dobra uwaga. @Sarfraz opublikował rozwiązanie, które pożyczy. –

4

można zdecydować jednego z nich tak :

<script>window.JSON || document.write('<script src="js/json2.js"><\/script>')</script> 

ten sprawdza window.JSON (obsługiwany przez przeglądarkę) pierwsza jeśli istnieje, użyj innego się json2.js że import z Crockforda.

aktualizacja

var whichJSON = null; 

if (! window.JSON) { 
    document.write('<script src="js/json2.js"><\/script>'); 
    whichJSON = 'Crockford Version'; 
} 
else { 
    whichJSON = 'Browser Native Version'; 
} 

alert(whichJSON); 
+2

To jest bardzo eleganckie, ale nie ułatwia późniejszego sprawdzenia kodu, którego implementacja jest używana. –

+0

@ davidkennedy85: Tak, nie będę się martwić o której wersji, ponieważ celem byłoby użycie JSON, którykolwiek dostępny :) – Sarfraz

+1

Zgadzam się, ale to nie odpowiada na pytanie :) –

Powiązane problemy