2015-04-15 128 views
1

我需要使用for循環在JavaScript中動態創建JSON對象。我曾嘗試使用array.Push方法,但它不起作用。我只獲得儲存的第一個值。迭代的剩餘值沒有被存儲。在JavaScript中動態創建JSON對象

這就是我想:

var array = []; 
    for (var i = 0; i < 4; i++) { 
     var username = drlist.reportees[i].name; 
     var think40 = getthink40(n,m); 
     if (think40.isSuccessful){ 
      var result = think40.array; 
      var length = result.length; 
      var tes= 0; 
      for (var j = 0; j < length-1; j++){ 
       tes = tes + parseFloat(result[j].duration); 
      } 
      var hours = tes/60; 
      var think = (hours/40)*100; 
      if (think > 100) 
       { 
       think =100; 
       } 
      array.push({ 
        name: username, 
        hours: think 
       }); 
       } 
     return array; 
    } 
+0

你可能會張貼你試過的東西嗎? – 4Dev

+0

var myData = []; rows.each(function(index){ var obj = {this.find('。elementOne')。val(), name:$ this.find('。elementTwo')。text() }; myData.push(obj); }); 我以此爲例,並將值推送到json數組並重新執行,但我只獲得循環的第一個值 –

+0

您可以/應該使用代碼編輯問題而不是對其進行註釋 –

回答

2

嘗試......

var jsonArray = []; 
function test(){ 
for (var i=0; i<3;i++) 
{ 
    var jsonObject = {'a':1, 'b':2}; jsonArray.push(jsonObject); 
} 
return jsonArray; 
} 

注意:您正在返回的JSONObject,而不是jsonArray。你應該返回jsonArray。

+0

錯誤500:無法寫入響應:適配器調用返回無效結果。它應該返回一個JSON對象。當我嘗試上面的代碼,我得到這個錯誤代碼 –

+0

@GopiNath我認爲你有這個條件的問題,如果(think40.isSuccessful)。我認爲這會返回3個項目的錯誤,並且只有一個項目的條件爲真。這可能是你獲得一件物品的原因。你可以把一個console.log並檢查think40.isSuccessful返回每個項目? –

+0

有沒有辦法逐行調試工作燈適配器?我無法使用螢火蟲進行調試 –

0

在JavaScript中創建和操作JSON對象與任何其他類型的對象都沒有太大差別,但確實有一些限制。這些主要圍繞JSON支持的數據類型,其中最值得注意的是缺少日期和功能。

JavaScript對象幾乎可以包含任何東西(對ES6和符號越來越如此),但JSON是其中的一個有限子集。 JSON spec簡短易讀(完整的圖片!),所以我建議從那裏開始。正如您在規範中看到的,值類型包括字符串,數字,對象,數組,布爾關鍵字和空值。不支持日期 - 通過將它們格式化爲ISO 8601字符串或函數可輕鬆解決。

要將有效的JavaScript對象轉換爲最終的JSON格式,只涉及有限的字符串格式和轉義。大多數現代瀏覽器都有一個global JSON API這樣做,提供解析和渲染(stringify)方法。這是您的codec,也是操縱JSON的第一步也是最後一步。

在您的示例中,您將按常規構建對象,並根據需要分配屬性(foo.bar = 3)。最後,要返回JSON(這實際上只是JS中的一個字符串),您將獲取您創建的對象並將其傳遞給JSON.stringify。這將產生一個有效的,安全的,轉義的JSON字符串,適用於傳遞給Web服務和其他腳本。