2015-04-15 134 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服务和其他脚本。