2017-03-16 13 views
6
$.ajax({ 
    url: "get_cards.php", 
    type: "GET", 
    data: {selection:JSON.stringify(selection)}, 
    success: function(data) { 
     var json = JSON.parse(data); 
     sessionStorage.setItem("json", JSON.stringify(json)); 
    } 
}); 

Sau đó, trong tập tin khác Tôi lấy JSON từ sessionStorage:Javascript: Đang cố gắng để truy cập vào các yếu tố của một mảng JSON mang lại cho tôi nhân vật cá nhân

var json = JSON.parse(JSON.stringify(sessionStorage.getItem("json"))); 
if(json) { 
    sessionStorage.removeItem("json"); 
} 

này mang lại cho tôi một mảng của các đối tượng JSON, ví dụ : [{'name':'Bob',...}]. Tuy nhiên, khi tôi cố truy cập phần tử đầu tiên của mảng: json[0], tôi nhận được '[' và khi tôi thử json[0].name Tôi nhận được undefined. Độ dài json được báo cáo là 159, do đó, nó tính từng ký tự riêng lẻ như một phần tử.

EDIT: Khi tôi cập nhật:

var json = JSON.parse(sessionStorage.getItem("json")); 
if(json) { 
    sessionStorage.removeItem("json"); 
} 

tôi nhận được một chiều dài 1 (đó là chính xác), nhưng một lỗi khi truy cập vào json[0].name:

Uncaught TypeError: Cannot read property '0' of null 
at HTMLDocument.<anonymous> (studying.js:10) 
at j (jquery.min.js:2) 
at k (jquery.min.js:2) 
+0

Bạn có một chuỗi. Sử dụng 'JSON.parse() 'một cách chính xác – Weedoze

+0

tại sao bạn lại xâu chuỗi nó lại chỉ để phân tích cú pháp nó một lần nữa? – Cruiser

+0

Bạn đã lưu chuỗi json trong bộ nhớ cục bộ, Tại sao bạn gọi xâu chuỗi hai lần? – abhishekkannojia

Trả lời

8

Bạn đang stringifying sự đã chuyển đổi thành chuỗi json:

var json = JSON.parse(JSON.stringify(sessionStorage.getItem("json"))); // wrong ! 

điều này phải là:

var json = JSON.parse(sessionStorage.getItem("json")); 

Nếu bạn JSON.stringify("foo"), khi đó bạn nhận được chuỗi trích dẫn: "\"foo\"".

JSON.stringify() chuyển đổi một giá trị cho ký hiệu JSON đại diện cho nó:

  • Thuộc tính của các đối tượng không cho mảng không đảm bảo được chuyển đổi thành chuỗi trong bất kỳ thứ tự cụ thể. Không dựa vào thứ tự các thuộc tính trong phạm vi cùng một đối tượng trong chuỗi.
  • Boolean, Number, và String đối tượng được chuyển đổi thành các giá trị nguyên thủy tương ứng trong stringification, phù hợp với việc chuyển đổi truyền thống ngữ nghĩa.
  • Nếu không xác định, chức năng hoặc biểu tượng gặp phải trong quá trình chuyển đổi , hoặc bị bỏ qua (khi được tìm thấy trong đối tượng) hoặc bị kiểm duyệt thành null (khi được tìm thấy trong một mảng). JSON.stringify có thể cũng chỉ trả về không xác định khi chuyển các giá trị "thuần" như JSON.stringify (function() {}) hoặc JSON.stringify (không xác định).
  • Tất cả thuộc tính khóa biểu tượng sẽ bị bỏ qua hoàn toàn, ngay cả khi sử dụng chức năng thay thế.
  • tính không đếm được sẽ bị bỏ qua

ví dụ:

JSON.stringify({});     // '{}' 
JSON.stringify(true);    // 'true' 
JSON.stringify('foo');    // '"foo"' 
JSON.stringify([1, 'false', false]); // '[1,"false",false]' 
JSON.stringify({ x: 5 });   // '{"x":5}' 

Source: MDN

+1

mặc dù nó chỉ là mã dự phòng như 'JSON.parse (JSON.stringify (sessionStorage.getItem (" json "));' nhưng stringify a string và sau đó phân tích nó thành json làm cho chuỗi giá trị của nó? làm thế nào mà? –

+4

@AnikIslamAbhi: Bạn luôn lấy lại giá trị ban đầu. Và giá trị ban đầu ('sessionStorage.getItem (" json ")') là một chuỗi. 'JSON.parse (JSON.stringify (" foo ")) ===" foo "'. * "phân tích nó thành json" * Không có gì được phân tích cú pháp * thành * JSON. 'JSON.stringify' * tạo JSON *. 'JSON.parse' tạo một giá trị JavaScript gốc từ JSON. Nếu một giá trị chuỗi được mã hóa dưới dạng JSON, bạn sẽ nhận được một giá trị chuỗi. Nếu một giá trị số được mã hóa dưới dạng JSON, bạn sẽ nhận được một giá trị số. Nếu một mảng được mã hóa dưới dạng JSON, bạn sẽ nhận được một mảng, v.v. –

+0

@FelixKling bạn tuyệt vời –

Các vấn đề liên quan