2010-06-16 81 views
2

我犯了這樣一個簡單的JavaScript類:使用jquery創建json數組和json項目?

function Horse() { 
    this.color = 'brown'; 
    this.speed = 'somewhat slow'; 
} 

我連着幾個實例來一些元素,像這樣:

$("#horse1").data('d', new Horse()); 
$("#horse2").data('d', new Horse()); 
$("#horse3").data('d', new Horse()); 

現在我想創建一個JSON陣列的JSON表示每個馬物體。所以我這樣做:

// How do I create an empty JSON array here?: 
var myJsonArray = ?; 

var children = $("#horses").children(); 
for (var i = 0, m = children.size(); i < m; i++) { 
    var panel = children[i]; 
    var horse = $(panel).data('h'); 

    // And how do I create a JSON rep of my horse here? 
    var myJsonHorse = new JsonHorse(?); 

    // Finally, how do I add it to the json array? 
    myJsonArray.push(myJsonHorse); 
} 

耶我的最終目標是讓所有的馬匹單JSON數組遍歷所有的孩子們後 - 不知道這是否應該以純做jQuery的JavaScript或?

感謝

----------------編輯-------------------

對不起,我的最終目標是將數組轉換爲一個字符串,所以我有一個大的json數組轉換爲一個字符串,我可以提交給一個將由我的服務器處理的ajax調用。

+0

事後你在做什麼?一個普通的數組在這裏似乎是適合的,所以我不確定你在做什麼/結束遊戲是什麼。 – 2010-06-16 00:19:54

+0

哦,是的,我想讓它成爲一個長json字符串,所以我可以在ajax調用中使用它,謝謝。 – user246114 2010-06-16 03:44:44

回答

4

要聲明,你只需要數組文本符號數組:

var myArray = []; 

push方法不會有任何問題的工作。

另一種可能性是使用$.map方法:

var myArray = $("#horses").children().map(function (index, el) { 
    return $(el).data('d'); 
}).get(); 
// Will return an array containing: 
// [{"color":"brown","speed":"somewhat slow"}, 
// {"color":"brown","speed":"somewhat slow"}, 
// {"color":"brown","speed":"somewhat slow"}] 

檢查的示例here

然後要將該數組轉換爲JSON字符串,可以使用JSON.stringify方法(幾乎可以在所有瀏覽器上本機提供,對於IE < 8,您可以使用json2.js)。

+0

+1 - 不是說它有很大的不同,但是''.data(el,'d')'在這種情況下效率會更高,除非需要,否則不需要創建jQuery包裝器。 – 2010-06-16 00:46:21

+0

這幾乎看起來像我需要的,但我該如何使該數組爲一個字符串?我想將它發送到服務器端腳本,我希望將其反序列化到服務器端,以便在那裏的單個對象上運行,謝謝。 – user246114 2010-06-16 03:46:43

+0

@ user246114:您需要使用'JSON.stringify'方法將該數組及其具有的對象元素轉換爲JSON,該方法在除IE <= 7之外的所有瀏覽器上都可用,您可以添加[json2.js ](http://www.json.org/json2.js)庫到你的頁面,使其工作在IE <= 7。 – CMS 2010-06-16 03:59:51