2011-06-28 38 views
32

Tôi chỉ mới bắt đầu với Mảng, Đối tượng và JSON - vì vậy hy vọng chỉ có một cái gì đó đơn giản mà tôi nhìn thấy ở đây. Tôi gặp phải lỗi khi cố gắng thêm (đẩy) một mục mới vào đối tượng json của tôi.JSON lồng nhau: Cách thêm (đẩy) các mục mới vào một đối tượng?

Tôi gặp phải lỗi sau: Result of expression 'library.push' [undefined] is not a function(về phía cuối đoạn mã của tôi).

// This is my JSON object generated from a database 
var library = { 
    "Gold Rush" : { 
     "foregrounds" : ["Slide 1","Slide 2","Slide 3"], 
     "backgrounds" : ["1.jpg","","2.jpg"] 
    }, 
    "California" : { 
     "foregrounds" : ["Slide 1","Slide 2","Slide 3"], 
     "backgrounds" : ["3.jpg","4.jpg","5.jpg"] 
    } 
} 

// These will be dynamically generated vars from editor 
var title = "Gold Rush"; 
var foregrounds = ["Howdy","Slide 2"]; 
var backgrounds = ["1.jpg",""]; 

function save() { 

    // If title already exists, modify item 
    if (library[title]) { 
     // Replace values with new 
     library[title].foregrounds = foregrounds; 
     library[title].backgrounds = backgrounds; 

     // Save to Database. Then on callback... 
     document.write('Changes Saved to <b>'+title+'</b>'); 

    // If title does not exist, add new item 
    else { 
     // Format it for the JSON object 
     var item = ('"'+title+'" : {"foregrounds" : '+foregrounds+',"backgrounds" : '+backgrounds+'}'); 


     // THE PROBLEM SEEMS TO BE HERE?? 
     // Error: "Result of expression 'library.push' [undefined] is not a function" 
     library.push(item); 


     // Save to Database. Then on callback... 
     document.write('Added: <b>'+title+'</b>'); 
    } 
} 

save(); 

Trả lời

42

library là một đối tượng chứ không phải mảng. Bạn đẩy mọi thứ lên mảng. Không giống như PHP, Javascript tạo nên sự khác biệt.

Mã của bạn cố tạo một chuỗi trông giống như mã nguồn cho cặp khóa-giá trị và sau đó "đẩy" nó lên đối tượng. Đó không phải là ngay cả cách nó hoạt động.

Điều bạn muốn làm là thêm cặp khóa-giá trị mới vào đối tượng, trong đó khóa là tiêu đề và giá trị là một đối tượng khác. Điều đó có dạng như sau:

library[title] = {"foregrounds" : foregrounds, "backgrounds" : backgrounds}; 

"Đối tượng JSON" là một thuật ngữ mơ hồ. Bạn phải cẩn thận phân biệt giữa một đối tượng thực trong bộ nhớ trong chương trình của bạn và một đoạn văn bản có định dạng JSON.

+0

Hoàn hảo !! Cảm ơn! – Josiah

7

push là một phương pháp Array, cho json đối tượng bạn có thể cần phải định nghĩa nó

này nên làm điều đó:

library[title] = {"foregrounds" : foregrounds,"backgrounds" : backgrounds}; 
+0

Ngay trên! Cảm ơn! – Josiah

11

Nếu JSON của bạn là không quan trọng, bạn có thể làm điều đó như thế này:

library[library.length] = {"foregrounds" : foregrounds,"backgrounds" : backgrounds}; 

Vì vậy, hãy thử này:

var library = {[{ 
    "title"  : "Gold Rush", 
     "foregrounds" : ["Slide 1","Slide 2","Slide 3"], 
     "backgrounds" : ["1.jpg","","2.jpg"] 
    }, { 
    "title"  : California", 
     "foregrounds" : ["Slide 1","Slide 2","Slide 3"], 
     "backgrounds" : ["3.jpg","4.jpg","5.jpg"] 
    }] 
} 

Sau đó:

library[library.length] = {"title" : "Gold Rush", "foregrounds" : ["Howdy","Slide 2"], "backgrounds" : ["1.jpg",""]}; 
Các vấn đề liên quan