2012-06-22 10 views
6

Tôi đang sử dụng Crockford 's json2.js. Khi tôi muốn xâu chuỗi, tôi làm JSON.stringify() ... hoạt động tuyệt vời.Làm cách nào để biết đối tượng JSON nào đang được sử dụng (Crockford hay đối tượng khác)?

Tuy nhiên, những người đã xem xét mã biết rằng nó sẽ xóa các đối tượng và thuộc tính JSON hiện có. Tôi nghi ngờ một vấn đề nào đó mà tôi đang gặp có thể là do sự trì hoãn này.

Có thuộc tính nào của đối tượng JSON tôi có thể kiểm tra xem trình duyệt có đang sử dụng đối tượng của Crockford hay một số đối tượng khác không? Nó sẽ được tốt đẹp để có thể làm điều gì đó như alert(JSON.version());

+1

Có an toàn để giả định rằng hoặc là tất cả đối tượng JSON là thực hiện hoặc không ai trong số họ được Crockford? Nếu có, thì bạn có thể kiểm tra đối tượng toàn cầu JSON trước khi giới thiệu kịch bản lệnh của Crockford, thiết lập một biến toàn cục như 'nativeJSON = false;' mà bạn có thể tham chiếu sau trong mã của bạn. –

+0

Ngoài ra, +1 để chỉ ra tập lệnh tiện dụng này! –

+0

@ davidkennedy85, tôi tin (nhưng không biết) rằng nhiều trình duyệt trong những ngày này có các đối tượng JSON gốc trong việc triển khai javascript của chúng ... Tôi nghĩ vậy. Tôi không biết; ngoài giải đấu của tôi. –

Trả lời

3

Trước khi bạn tải script Crockford, bạn có thể kiểm tra các đối tượng JSON toàn cầu giống hệt như anh ta:

<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

Không phải [* tất cả *] (https://github.com/douglascrockford/JSON-js/blob/master/json2.js), tôi nghĩ vậy? – Arjan

+1

Các tập lệnh được tải thông qua thuộc tính 'src' có được thực hiện theo thứ tự được sắp xếp theo thứ tự trên mỗi trang không? Tôi sẽ không muốn kiểm tra xảy ra sau khi json2.js được tải. –

+0

Đó là một điểm tốt. @Sarfraz đã đăng một giải pháp mà tôi sẽ mượn. –

4

Bạn có thể quyết định một để sử dụng như thế này :

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

này kiểm tra window.JSON (được hỗ trợ bởi trình duyệt) đầu tiên nếu nó tồn tại, sử dụng khác nhập khẩu json2.js của Crockford.

cập nhật

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

Điều này rất thanh lịch, nhưng nó không làm cho nó dễ dàng hơn để kiểm tra sau này trong mã mà thực hiện đang được sử dụng. –

+0

@ davidkennedy85: Đúng, tôi sẽ không lo lắng về phiên bản nào vì mục đích sẽ là sử dụng JSON nào có sẵn :) – Sarfraz

+1

Tôi đồng ý, nhưng nó không trả lời câu hỏi :) –