以JSON访问数组

时间:2012-08-30 02:44:29

标签: javascript arrays json

我觉得这个问题必须要问,但对于我的生活,我找不到它。我有一系列通过游戏数据进行足球比赛的对象。该数组实际上是一个对象。每个对象都封装了足球比赛中任何给定比赛期间发生的所有数据。这是我的JSON对象:

    var playsToAdd = {
    "play":
    [
     {"quarter":""},
     {"drive":""},
     {"down":""},
     {"fieldPos":""},
     {"yardsToGo":""},
     {"yardsGained":""},
     {"playType":""},
     {"playResult":""},
     {"ballSide":""},
     {"oForm":""},
     {"dForm":""},
     {"scoreFSU":""},
     {"scoreOp":""},
     {"playSide":""},
     {"addToDB":""},
     {"players":
      [
       {"name":""},
       {"position":""}
      ]
     }
    ]
   };

这是我尝试向对象添加数据的地方

for(l=0;l<plays.length;l++)
   {
    playsToAdd.play[l].quarter=plays[l].quarter;
    playsToAdd.play[l].drive=plays[l].drive;
    playsToAdd.play[l].down=plays[l].down;
    playsToAdd.play[l].fieldPos=plays[l].fieldPos;
    playsToAdd.play[l].yardsToGo=plays[l].yardsToGo;
    playsToAdd.play[l].yardsGained=plays[l].yardsGained;
    playsToAdd.play[l].playType=plays[l].playType;
    playsToAdd.play[l].playResult=plays[l].playResult;
    playsToAdd.play[l].ballSide=plays[l].ballSide;
    playsToAdd.play[l].oForm=plays[l].oForm;
    playsToAdd.play[l].dForm=plays[l].dForm;
    playsToAdd.play[l].scoreFSU=plays[l].scoreFSU;
    playsToAdd.play[l].scoreOp=plays[l].scoreOp;
    playsToAdd.play[l].playSide=plays[l].playSide;
    playsToAdd.play[l].addToDB=plays[l].addToDB;
    for(m=0;m<plays[l].players.length;m++)
    {
     //playsToAdd[l].players[m].position=plays[l].players[m][1];
     //playsToAdd[l].players[m].name=plays[l].players[m][0];
     playsToAdd.play[l].players[m].name="test";
    }
   }

在我找到球员之前,一切似乎都很好。我实际上评论了我的目标,以确保这不是问题。关于Unable to get value of the property '0': object is null or undefined,我收到了错误playsToAdd.play[l].players[m].name="test";。我环顾了这个网站和其他人,但没有发现任何与我的问题有关的事情。非常感谢任何帮助

2 个答案:

答案 0 :(得分:3)

现在的问题是,你的playsToAdd是一个对象数组,每个对象包含一个属性,即四分之一,驱动器等。

它应该是一个对象数组,其中每个对象包含一个游戏的所有属性,即四分之一,驱动器等。

您的JSON结构应该是:

var playsToAdd = {
    "play":
    [
     {
       "quarter":"",
       "drive":"",
       "down":"",
       "fieldPos":"",
       "yardsToGo":"",
       "yardsGained":"",
       "playType":"",
       "playResult":"",
       "ballSide":"",
       "oForm":"",
       "dForm":"",
       "scoreFSU":"",
       "scoreOp":"",
       "playSide":"",
       "addToDB":"",
       "players":
      [
       {"name":"", "position":""},
       {"name":"", "position":""},
       ...
      ]
     }
    ]
   };

这样,您可以访问/设置数据,如:

playsToAdd.play[x].quarter = 'xyz';

playsToAdd.play[x].players[y].name = 'xyz';

答案 1 :(得分:0)

当您运行该循环时,尚未定义playsToAdd.play[l].players

如果您正在尝试创建对象的副本,则可以复制它:

playsToAdd = plays.slice(0);

这会创建plays数组的精确副本。也就是说,我不确定嵌套数组是否被复制或引用。如果您对此有疑问,请告诉我,我将能够进一步提供帮助。