2014-05-05 205 views
0

伙计们,我需要生成以下文件上传.json并返回到浏览器:JavaScript的JSON对象数组

"hosts": [ 
    { 
     "project": [ 
      { 
       "service": [ 
        { 
         "role": [ 
          { 
           "env": [ 
            { 
             "name": "Her blog", 
             "cmd": "ssh [email protected]" 
            }, 
            { 
             "name": "Her foo", 
             "cmd": "ssh [email protected]" 
            } 
           ] 
          } 
         ] 
        } 
       ] 
      } 
     ] 
    }, 
] 

我失去了如何循环通过几个本地列表中,并生成该对象。我遍历几个列表来实例化对象,像这样:

_.each(instances, function (instance) { 
    _.each(projects, function (project) { 
     _.each(services, function (service) { 
      _.each(roles, function (role) { 
       _.each(environments, function (environment) { 
        if (_.isUndefined (projectObject[project])) { 
         projectObject[project] = {}; 
        } 
        if(_.isUndefined(projectObject[project][service])) { 
         projectObject[project][service] = {}; 
        } 
        ... 
       }); 

在下一次迭代中,我建立每个实例的对象,但他们没有在浏览器中显示出来,即它的空数组,而不是一个对象。

_.extend(projectObject[project][service][role][environment],i); //doesnt work 

正如你所看到的,要求是有对象的数组。

我该如何解决这个问题?

+0

1.'instances','projects','services','roles','environments'都是字符串的数组,不是吗?如果是这样,他们是如何相互关联的? – Pavlo

+0

2.'hosts','instances'和'projectObject'指的是同一个东西吗? – Pavlo

回答

0

为了简化问题看看这个,可以说你有这个对象:

var Myhosts = {"hosts": [ 
{ 
    "project": [ 
     { 
      "service": [ 
       { 
        "role": [ 
         { 
          "env": [ 
           { 
            "name": "Her blog", 
            "cmd": "ssh [email protected]" 
           }, 
           { 
            "name": "Her foo", 
            "cmd": "ssh [email protected]" 
           } 
          ] 
         } 
        ] 
       } 
      ] 
     } 
    ] 
}, 
]} 

为了让你做到这一点的ENV的名称和CMD:

Myhosts.hosts[0].project[0].service[0].role[0].env[0].name === "Her blog" 
Myhosts.hosts[0].project[0].service[0].role[0].env[0].cmd === "ssh [email protected]" 
Myhosts.hosts[0].project[0].service[0].role[0].env[1].name === "Her foo" 

所以,如果你有更多的而不是任何数组中的一个对象,其中您看到[0]只是用像x这样的变量替换0并遍历每个维度。让我知道这是否有帮助。