2011-12-28 70 views
1

我試圖編寫一個可以將我的自定義數據(數據Sencha Touch商店使用)轉換爲JSON格式的實用程序函數,而且我幾乎完成了工作,但它無法使用來自twitter API的複雜數據,罰款簡單的數據類型。將JavaScript自定義數據數組添加到JSON

自定義數據

var items = []; 
for (var i = 0; i < 10; i++) { 
    var item = {}; 

    var data = {}; 
    data.prop1 = "123456789"; 
    data.prop2 = "Some Name"; 
    data.prop3 = "Some Date and Time"; 

    item.data = data; 

    items.push(item); 
} 

現在上面的數據可以在一個循環中被訪問,並且可以被轉換爲與JSON下面的函數。

function toJSON(items) { 
    var jsonString = "["; 

    for (var i = 0; i < items.length; i++) { 
     var item = items[i]; 

     jsonString += "{"; 

     for (var propertyName in item.data) { 
      jsonString += '"' + propertyName + '":' + '"' + item.data[propertyName] + '",'; 
     } 

     if (jsonString.substr(jsonString.length - 1, 1) === ",") { 
      jsonString = jsonString.substr(0, jsonString.length - 1); 
     } 

     jsonString += "},"; 
    } 

    if (jsonString.substr(jsonString.length - 1, 1) === ",") { 
     jsonString = jsonString.substr(0, jsonString.length - 1); 
    } 

    jsonString += "]"; 

    return jsonString; 
} 

問題是如果我正在做的編碼的事情是正確的?

你可以看到這些小提琴獲得實時體驗http://jsfiddle.net/WUMTF/http://senchafiddle.com/#gxtZ9

+1

你爲什麼不使用[JSON.js](https://github.com/douglascrockford/JSON-js)? – 2011-12-28 14:43:59

+2

您是否故意將數據屬性從輸出中刪除?您的輸出與「JSON.stringify」(內置於現代瀏覽器中)的輸出相同,除了每個項目中缺少「data」屬性。如果你故意拋出它,我會爭辯說,按摩數據更容易,然後使用'JSON.stringify'或許多JSON JS庫中的一個。 – 2011-12-28 14:52:34

+0

我沒有對數據的控制權,而且它始終只有深層次的意義。 – Neutralizer 2011-12-28 15:01:00

回答

1

是否有任何理由,你爲什麼不直接使用本地JSON.stringify()方法,或者你最喜歡的JavaScript/AJAX提供的(包裝)版本圖書館?它們將更加健壯,經過測試,安全並且性能更好。 (如果可用,大部分庫版本將簡單地調用瀏覽器的本地方法。)

toJSON您的toJSON實現可能適用於您的簡單測試數據,但由於多種原因無法處理更復雜類型的數據,但最可能是大多數很顯然,因爲它沒有考慮到任何類型的嵌套。它假定頂層始終是一個數組,並且數組中的每個元素只具有一個深度的屬性。看看https://github.com/douglascrockford/JSON-js/blob/master/json.js。這是由JSON的「父親」Douglas Crockford提供的實現。幾乎所有顯示的內容都需要有效的實現。不幸的是,如果您認爲您可以在短時間內輕鬆並簡單地重新創建(缺少複製和粘貼),那麼可能性會大打折扣。

+0

你會在jsfiddle中看到響應,所以這是我感興趣的編碼時得到的響應。 JSON不會在該響應中進行編碼嗎? – Neutralizer 2011-12-28 14:50:03

+0

我無法控制上面模擬的自定義數據。 – Neutralizer 2011-12-28 14:50:49

+0

@UmairAshraf - 請參閱Matt對您的問題的評論(上圖)。另外,請參閱我的jsFiddle的叉,證明這一點:http://jsfiddle.net/rUQ78/1/。 + Matt的建議 - 在調用JSON.stringify之後或者按下輸入數據或者輸出,但是不要嘗試自己重新創建JSON轉換,除非您已經證實需要(非常不可能)。 – ziesemer 2011-12-28 15:00:55

相關問題